Intereting Posts
Эффект изображения заголовка Spotify ListView Автоматически форматировать номер телефона в EditText Можно ли получить ссылку на ListView из Adapter в Android? Создание прокрутки TextView на Android Маршрутизировать аудио с телефона Android на ПК через USB? Получить измеренный размер и положение растрового изображения на холсте после 2D преобразования Java.lang.IllegalStateException: попытка повторного открытия уже закрытого объекта (попытка закрытия) Проблема с 9 патч-изображением в качестве фона Сколько действий против фрагментов? Android SDK получает NotRegistered ошибку от GCM через несколько часов Биллинг в приложении в Android – вопросы Как настроить инъекцию зависимостей с помощью кинжала для вещей, отличных от действий и фрагментов? Отключить прокрутку для позиции в RecyclerView с помощью ItemTouchHelper.SimpleCallback Передача строки из одной активности в другую активность в Android Как скомпилировать код C ++ 14 для Android?

Как прокручивать ListView в андроиде программно до нижнего жеста

Я новичок в android и реализовал pull для обновления и пользовательский ListView в своем демонстрационном приложении. Я удаляю элемент из класса listItem, когда я получаю dong pull, чтобы обновить этот элемент, который был удален из моего ListView, но это необходимо для этого, я хочу удалить этот элемент после его удаления. Я попытался notifyDatasetChange, который не будет работать в моем Case.So, я хочу, чтобы сделать мой список вниз программно, поэтому список будет обновляться, пожалуйста, помогите мне это сделать. Спасибо

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(); } } } 

Добавьте следующий код в свой класс активности, чтобы получить его экземпляр в другом классе и обновить 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() из класса, в котором вы refreshListView() свою строку, используя следующий код:

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

Вы можете обернуть свой ListView в SwipeRefreshLayout, и он выполнит жест вверх.

https://developer.android.com/reference/android/support/v4/widget/SwipeRefreshLayout.html

https://developer.android.com/training/swipe/add-swipe-interface.html

Пример:

 <android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/swiperefresh" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@android:id/list" android:layout_width="match_parent" android:layout_height="match_parent" /> </android.support.v4.widget.SwipeRefreshLayout> 

И в вашей активности java-код

 SwipeRefreshLayout swipeRefreshLayout =(SwipeRefreshLayout)findViewById(R.id.swiperefresh); swipeRefreshLayout.setOnRefreshListener(new OnRefreshListener() { @Override public void onRefresh() { //Do something here swipeRefreshLayout.setRefreshing(false); // For end refreshing animation } });