Rafraîchissement de la liste Android

j'ai une ListView qui me montre des données à travers un tableau (qui est dans une autre classe et je l'accède à travers son objet).

chaque fois que je supprime un élément du Menu ListView via le contexte, la liste n'est pas rafraîchissante mais l'élément est supprimé du tableau. Comment puis-je rafraîchir la liste pour montrer ceci?

Code:

     public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {
    if (v.getId()==R.id.mainListView) {
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo;
        post=info.position;
      menu.setHeaderTitle(stocks[info.position]);
        String[] menuItems = stt;
        for (int i = 0; i<menuItems.length; i++) {
            menu.add(Menu.NONE, i, i, menuItems[i]);
            }
    }
  }

     @Override
      public boolean onContextItemSelected(MenuItem item) {
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
        int menuItemIndex = item.getItemId();
        String[] menuItems = stt;
        String menuItemName = menuItems[menuItemIndex];
        listItemName = stocks[info.position];
        stockname.remove(post-1);

    return true;
  }
16
demandé sur Anil Bhatiya 2010-11-03 18:47:46

5 réponses

vous devez informer votre adaptateur ListView que les données ont changé.

listViewAdapater.notifyDataSetChanged();

si, pour une raison quelconque, cela ne fonctionne pas et qu'il y a des situations bizarres où il semble que cela n'ait pas été notifié, vous pouvez simplement réattribuer votre adaptateur via le constructeur avec le tableau mis à jour.

39
répondu blindstuff 2012-07-11 11:56:41

Je n'ai pas de méthode notifyDataSetChanged() (Android 2.3).

ce qui suit a fonctionné pour moi:

getListView().invalidate();

dans mon cas, j'ai changé l'adaptateur en entier et il ne se rafraîchit toujours pas, donc pour moi la méthode décrite ci-dessus est la seule solution de travail.

4
répondu Alexander Abakumov 2017-08-02 22:28:29

Try getListView (). refreshDrawableState

0
répondu Edwin Evans 2012-05-06 03:52:24
    private static ArrayList<Radio> m_streamsList;

    final ListView listView = (ListView) rootView.findViewById(R.id.stream_listRS);

    //my class where i insert data into my array
    m_myDBHelp = new DBHelper();
    m_streamsList = m_myDBHelp.selectStreamsList();

    // my list adapter - this is a class created by me
    RadioAdapter adapt = new RadioAdapter(context, m_streamsList);
    listView.setAdapter(adapt);

    ////////////------------- so . when i inserted a row in db, i need to refresh the list
    m_myDBHelp.insertStreamIntoDB(String name, String url);
    /// in my case method invalidate works fine
    listView.invalidate();
    m_streamsList = null;
    m_streamsList = m_myDBHelp.selectStreamsList();

    //you need to set adapter again
    RadioAdapter adapt2 = new RadioAdapter(context, m_streamsList);
    listView.setAdapter(adapt2);






import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.example.npopa.musicplayern.R;
import com.example.npopa.musicplayern.Radio;

import java.util.ArrayList;

public class RadioAdapter extends BaseAdapter{
private ArrayList<Radio> m_streams;
private LayoutInflater m_stramInf;

public RadioAdapter(Context c, ArrayList<Radio> theStreams){
    m_streams = theStreams;
    m_stramInf = LayoutInflater.from(c);
}

@Override
public int getCount() {
    return m_streams.size();
}

@Override
public Object getItem(int arg0) {
    return null;
}

@Override
public long getItemId(int arg0) {
    return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    //map to radio_s layout
    LinearLayout streamLay = (LinearLayout) m_stramInf.inflate(R.layout.all_songs_t, parent, false);

    TextView name = (TextView) streamLay.findViewById(R.id.song_title);
    TextView url = (TextView) streamLay.findViewById(R.id.song_artist);
    ImageView imgALb = (ImageView) streamLay.findViewById(R.id.albumicon);

    //get all_songs_t using position
    Radio currStream = m_streams.get(position);
    name.setText(currStream.getName());
    url.setText(currStream.getUrl());
    imgALb.setImageResource(R.drawable.radio_stream);

    //set position as tag
    streamLay.setTag(position);
    return streamLay;
}

}

public class Radio {
private int id;
private String name;
private String url;

public Radio(int id, String name, String url) {
    this.id = id;
    this.name = name;
    this.url = url;
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getUrl() {
    return url;
}

public void setUrl(String url) {
    this.url = url;
}
}
0
répondu Nicu P 2016-07-18 21:12:26

liste rafraîchissante pour moi: listView.invalidateViews();

, Il va faire:

mDataChanged = true;
rememberSyncState();
requestLayout();
invalidate();

le cas comme pour gérer un élément de liste suppression ou suppression tous les éléments à la fois.

testé dans API 24.

0
répondu Osify 2016-12-21 11:55:52