Cómo desplazar un ListView en android programatically a hasta gesto hacia abajo
Soy newbie a androide y he implementado tirar para actualizar y un ListView personalizado en mi aplicación de demostración. Estoy borrando un elemento de la clase listItem, cuando estoy dong tirar para actualizar ese elemento se elimina de mi ListView, pero debe ser necesario para hacer eso, quiero quitar ese elemento una vez deleted.I han intentado notifyDatasetChange que no funcionará en mi Así que quiero hacer tirando de mi lista para abajo programatically así que la lista será refresh, Por favor ayúdame a hacerlo. Gracias
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(); } } }
- Lista de PullToRefresh con el encabezado de sección fijado
- La aplicación arroja java.lang.StackOverflowError Excepción en la actividad
- Ejemplo sencillo sobre cómo usar SwipeRefreshLayout con ListView
- ¿Cómo puedo usar la funcionalidad pull-to-refresh en una aplicación PhoneGap sin iScroll?
- Refrescante adaptador al tirar de ListView en android
- Cómo implementar pull para actualizar en un ListFragment
- Android Lollipop - Tire para actualizar
- Galería QuiltView con Pull para actualizar en Android?
- Android PullToRefresh onScrollListener no funciona
- Cómo deshabilitar la funcionalidad pulltorefresh por primera vez?
- Android: Tire para actualizar para GridView
- ¿Es posible fusionar stickylistviewheader con crisbanes pulltorefresh?
- Deslizar hacia abajo para actualizar el diseño del material
Agregue el código siguiente a su clase de actividad para obtener la instancia de la misma en otra clase y para actualizar su 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(); }
Ahora puede llamar a refreshListView()
de la clase en la que está eliminando la fila utilizando el código siguiente:
// call this after removal to refresh the List View MainActivity.getInstance().refreshListView();
Usted puede envolver su ListView en SwipeRefreshLayout y se implementará el gesto de arriba a abajo.
https://developer.android.com/reference/android/support/v4/widget/SwipeRefreshLayout.html
https://developer.android.com/training/swipe/add-swipe-interface.html
Ejemplo:
<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>
y en tu actividad código 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 } });
- ¿Cómo recuperar imágenes de perfil de Whatsapp?
- StartActivity en onPause () no funciona después de abrir una nueva aplicación