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

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 } }); 
  • Utilizar PullToRefreshExpandableListView en Fragmento
  • FragmentManager reemplazar fragmentos sin llamar onPause () onDestroy () para el fragmento antiguo
  • Chris Banes PullToRefreshListView con el error del adaptador personalizado
  • Implementación de la atracción de Chris Banes para actualizar junto con desplazamiento horizontal en la vista de lista
  • Cómo pasar la matriz int de identificadores de recursos de color desde array.xml a SwipeRefreshLayout.setColorSchemeResources
  • Android - ¿cómo puedo saber cuando gridview ha llegado al fondo?
  • Cómo implementar "Deslizar hacia abajo para actualizar" como en la nueva aplicación de GMail
  • ¿Cómo puedo configurar un ListView personalizado con un divisor mediante Android?
  • Tire para actualizar para GridView en Android
  • ProgressBar en ActionBar, como la última actualización de la aplicación de GMail
  • Cómo implementar Android Pull-to-Refresh
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.