2016-03-04 3 views
0

Bonjour je suis nouveau à android et de travailler sur une démo de Custom ListView, je l'ai fait une adapter, une coutume et la liaison ListItem à mes Listview, toutes choses fonctionnent parfaitement, mais je veux pour enlever l'article quand je le supprimer de la listListe n'est pas rafraîchi après que je supprimer un élément dans Android

Adaptateur

public class TimelineAdapter extends ArrayAdapter<Post> { 

    private final LayoutInflater mInflater; 


    public TimelineAdapter(Context context) { 

     super(context, R.layout.list_item_post); 
     mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 



    public void setData(List<Post> data) { 
     setNotifyOnChange(true); 
     clear(); 
     if (data != null) { 
      addAll(data); 
      notifyDataSetChanged(); 
     } 
     notifyDataSetChanged(); 
    } 


    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 

     Post post = getItem(position); 
     PostListItem view; 
     if (convertView == null) { 
      view = (PostListItem) mInflater.inflate(R.layout.list_item_post, parent, false); 


     } else { 
      view = (PostListItem) convertView; 

     } 
     view.setPost(post); 
     notifyDataSetChanged(); 
     return view; 
    } 
} 

fragment

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

ListItem

if (which == 2) { 

        if (mPost.postUser.userID == sharedConnect.mCurrentUser.userID) { 
         // Log.e("Remove Post", "Success"); 


         //Added by jigar.. 
         tfragment = new TimelineFragment(); 
         AlertDialog.Builder builder1 = new AlertDialog.Builder(getContext()); 

         builder1.setMessage("Are you sure?"); 
         builder1.setCancelable(true); 

         builder1.setPositiveButton(
           "Yes", 
           new DialogInterface.OnClickListener() { 
            public void onClick(DialogInterface dialog, int id) { 
             dialog.cancel(); 

//open = false; 
             final AsyncTask<Void, Void, Boolean> deleted = new AsyncTask<Void, Void, Boolean>() { 

              @Override 
              protected Boolean doInBackground(Void... params) { 

               Connect sharedConnect = Connect.getInstance(getContext()); 
               sharedConnect.deletePost(mPost.postID); 


               return true; 
              } 

              protected void onPostExecute(Boolean result) { 

               Toast.makeText(getContext(), "Deleted", 
                 Toast.LENGTH_SHORT).show(); 
               tfragment = new TimelineFragment(); 
               tfragment.mTimelineAdapter.notifyDataSetChanged(); 

              } 
             }.execute(); 


            } 
           }); 

         builder1.setNegativeButton(
           "No", 
           new DialogInterface.OnClickListener() { 
            public void onClick(DialogInterface dialog, int id) { 
             dialog.cancel(); 
             // open = false; 
            } 
           }); 

         AlertDialog alert11 = builder1.create(); 
         alert11.show(); 


         //end 
        } 
+1

Pouvez-vous s'il vous plaît coller votre élément de liste delete. Je ne peux pas en voir un :) et pourquoi appelez-vous notifyDataSetChanged(); dans getView ??? et de plus vous créez une nouvelle instance du fragment et rechargez l'adaptateur de cette nouvelle instance, ce que vous devez faire est d'obtenir l'instance de fragment existante qui est déjà chargée et recharger son adaptateur simplement :) –

+0

@ SandeepBhandari-puis-je vous envoyer le code? si possible? pls me sauver frère .. :( –

+0

Continuer :) Envoyez-le ou poster ici seulement bro qui aidera tout le monde à vous guider :) Il suffit de poster votre code de suppression c'est assez Si cela ne suffit pas, nous va penser à l'envoi de code ok ??? –

Répondre

0

implémenter la méthode onResume() et charger l'adaptateur dans la méthode onResume() et notifier ensemble de données a changé

+0

Hemant-vous remercie pour une réponse rapide, mais pouvez-vous me dire où écrire je veux dire que je fais classe personnalisée pour mt listItem et en faire supprimer, alors? –

+0

Vous devez écrire onResume() dans la classe dans laquelle vous chargez l'adaptateur pour la vue de liste. –

+0

Je configure l'adaptateur dans mon fragment et j'ai utilisé pulltorefresh. –

0

d'abord utiliser le adapter.notifiDataSetChanged() soigneusement. Il doit être utilisé lorsque vous ajoutez ou supprimez une ligne de la liste.

Pour supprimer un élément de la liste, définissez onItemclicklistener sur votre ListView

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

     } 
     }); 

de cela, vous obtiendrez la position de l'élément cliqué que vous souhaitez supprimer.

définir maintenant une méthode dans votre adaptateur

public void deleteRowFromUi(int position) { 
    dataList.remove(position); 
    notifyDataSetChanged(); 
} 

Et appeler cette méthode de l'activité à l'aide par exemple de l'adaptateur dans l'activité