gpt4 book ai didi

android - 如何以编程方式在 Android 中将 ListView 滚动到上下手势

转载 作者:太空宇宙 更新时间:2023-11-03 11:04:12 26 4
gpt4 key购买 nike

我是 android 新手,在我的演示应用程序中实现了下拉刷新和自定义 ListView。我正在从 listItem 类中删除一个项目,当我拉动刷新时,该项目已从我的 ListView 中删除,但它必须这样做,我想在删除后删除该项目。我已经尝试过 notifyDatasetChange,这在我的案例。所以我想以编程方式将我的列表下拉,以便刷新列表,请帮助我做到这一点。谢谢

public class TimelineFragment extends BaseFragment implements LoaderManager.LoaderCallbacks<List<Post>>, OnRefreshListener, OnScrollListener {
private static boolean inBackground = false;

public static android.widget.PopupMenu popupMenu;
private int index = -1;
private int top = 0;
public static TimelineAdapter mTimelineAdapter;
public TimelineLoader mTimelineLoader;
public PullToRefreshLayout mPullToRefreshLayout;
public static ListView mListViewTimeline;
ProgressBar mProgressBarLoading;
TextView mTextViewNoItems;
ImageView im;
Menu mm;
int total;
Activity activity;
private int hot_number = 0;
private TextView ui_hot = null;

int lastPosition;
int lastTop;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_timeline, container, false);
setHasOptionsMenu(true);
return rootView;
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}

private boolean isAppIsInBackground(Context context) {
boolean isInBackground = true;
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);

List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
ComponentName componentInfo = taskInfo.get(0).topActivity;
if (componentInfo.getPackageName().equals(context.getPackageName())) {
isInBackground = false;
}
return isInBackground;
}

public void updateHotCount(final int new_hot_number) {
hot_number = new_hot_number;
if (ui_hot == null) return;

if (new_hot_number == 0)
ui_hot.setVisibility(View.INVISIBLE);
else {
ui_hot.setVisibility(View.VISIBLE);
ui_hot.setText(Integer.toString(new_hot_number));
}
}

@Override
public void onPause() {
super.onPause();

if (isAppIsInBackground(getActivity())) {

Log.d("ACTION", "RETURN FROM BACGRKOUDN");
getLoaderManager().destroyLoader(0);
getLoaderManager().initLoader(0, null, TimelineFragment.this);
}
}

public void onStop() {
super.onStop();

if(mTimelineLoader != null) {
mTimelineLoader.stopLoading();
}
lastPosition = mListViewTimeline.getFirstVisiblePosition();
View v = mListViewTimeline.getChildAt(0);
lastTop = (v == null) ? 0 : v.getTop();

// lastPosition = mListViewTimeline.getSelectedItemPosition();
// int lastPositionInGroup = lastPosition - mListViewTimeline.getFirstVisiblePosition();
// lastTop = mListViewTimeline.getChildAt( lastPositionInGroup ).getTop();
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
getActivity().getMenuInflater().inflate(R.menu.search_post, menu);

final View menu_hotlist = menu.findItem(R.id.activity22).getActionView();
ui_hot = (TextView) menu_hotlist.findViewById(R.id.hotlist_hot);

SharedPreferences preferences = getActivity().getSharedPreferences("Notifications", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();

updateHotCount(preferences.getInt("notifications", 0));

new MyMenuItemStuffListener(menu_hotlist, "Show hot message") {
@Override
public void onClick(View v) {
Intent intent = new Intent(getActivity(), ActivityActivity.class);
intent.putExtra("View_mode", true);
startActivity(intent);
}
};
}

public boolean onOptionsItemSelected(MenuItem item) {

int id = item.getItemId();

if (id == R.id.search22) {
// Log.d("MyApp", "action bar clicked");

Intent intent = new Intent(getActivity(), SearchPostActivity.class);
intent.putExtra("View_mode", true);
startActivity(intent);
}
if (id == R.id.activity22) {
Intent intent = new Intent(getActivity(), ActivityActivity.class);
intent.putExtra("View_mode", true);
startActivity(intent);
}
return super.onOptionsItemSelected(item);
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {

super.onActivityCreated(savedInstanceState);
total = 0;
mPullToRefreshLayout = (PullToRefreshLayout) getActivity().findViewById(R.id.ptr_layout);
ActionBarPullToRefresh.from(getActivity()).allChildrenArePullable().listener(this).setup(mPullToRefreshLayout);

mProgressBarLoading = (ProgressBar) getActivity().findViewById(R.id.progressBarLoading);
mTextViewNoItems = (TextView) getActivity().findViewById(R.id.textViewNoItems);

mTimelineAdapter = new TimelineAdapter(getActivity());

mListViewTimeline = (ListView) getActivity().findViewById(R.id.listViewTimeline);
mListViewTimeline.setEmptyView(mProgressBarLoading);

mListViewTimeline.setAdapter(mTimelineAdapter);
mTimelineAdapter.notifyDataSetChanged();

mListViewTimeline.setOnScrollListener(this);
// mListViewTimeline.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
mListViewTimeline.setVerticalScrollBarEnabled(false);

activity = getActivity();

if(activity != null) {
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
getLoaderManager().initLoader(0, null, TimelineFragment.this);
//Do something after 100ms
}
}, 1000);

mTextViewNoItems.setOnClickListener(new OnClickListener() {
@Override
public void onClick(final View v) {
getLoaderManager().destroyLoader(0);

getLoaderManager().initLoader(0, null, TimelineFragment.this);
Log.d("CLICK", "REFRESH");
}
});
}
}
@Override
public Loader<List<Post>> onCreateLoader(int id, Bundle args) {

mTimelineLoader = new TimelineLoader(getActivity(), mListViewTimeline);
setHasOptionsMenu(true);
return mTimelineLoader;
}

@Override
public void onLoadFinished(Loader<List<Post>> arg0, List<Post> data) {
mTimelineAdapter.setData(data);

mTimelineAdapter.notifyDataSetChanged();

mPullToRefreshLayout.setRefreshComplete();
mTextViewNoItems.setVisibility(View.VISIBLE);
mProgressBarLoading.setVisibility(View.INVISIBLE);
mListViewTimeline.setEmptyView(mTextViewNoItems);

if (data.isEmpty()) {
getLoaderManager().destroyLoader(0);

getLoaderManager().initLoader(0, null, TimelineFragment.this);
}
}

@Override
public void onLoaderReset(Loader<List<Post>> arg0) {
mTimelineAdapter.setData(null);
setHasOptionsMenu(true);
}

@Override
public void onRefreshStarted(View view) {

getLoaderManager().destroyLoader(0);
getLoaderManager().initLoader(0, null, this);
mTextViewNoItems.setVisibility(View.INVISIBLE);
mProgressBarLoading.setVisibility(View.VISIBLE);
mListViewTimeline.setEmptyView(mProgressBarLoading);
}

@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

if (firstVisibleItem + visibleItemCount >= totalItemCount && visibleItemCount != 0) {
if (mTimelineLoader.loadMore() && !mTimelineLoader.loading()) {
total = totalItemCount - 1;
lastPosition = view.getFirstVisiblePosition();
View v = view.getChildAt(0);
lastTop = (v == null) ? 0 : v.getTop();
mTimelineLoader.onContentChanged();
}
}
}

最佳答案

将以下代码添加到您的 Activity 类中以在另一个类中获取它的实例并刷新您的 ListView:

private static MainActivity instance;

@Override
protected void onStart() {
super.onStart();
instance = this;
}

public static MainActivity getInstance(){
return instance;
}

public void refreshListView(){
mTimelineAdapter = new TimelineAdapter(getActivity());
mListViewTimeline.setAdapter(mTimelineAdapter);
mTimelineAdapter.notifyDataSetChanged();
}

您现在可以使用以下代码从要删除行的类中调用 refreshListView():

// call this after removal to refresh the List View
MainActivity.getInstance().refreshListView();

关于android - 如何以编程方式在 Android 中将 ListView 滚动到上下手势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35861450/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com