notifyDataSetChanged()不刷新我的ListView

时间:2014-08-13 04:45:11

标签: android android-listview notifydatasetchanged

我正在尝试从ListView中删除项目。但是,在致电notifyDataSetChanged()后,我的ListView无法刷新,而是在我点击EditText后刷新。我也尝试使用adapter.remove方法,但是产生了同样的错误。为什么会这样?

代码:

public class AddWordActivity extends Activity {
private static ArrayList<String> words = new ArrayList<String>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add_word);

    final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,       
    android.R.layout.simple_list_item_1, android.R.id.text1, words);
    final ListView listView = (ListView) findViewById(R.id.wordsListView);
    listView.setAdapter(adapter); 

    listView.setOnItemClickListener(new OnItemClickListener(){

        public void onItemClick(AdapterView<?> a, View v, final int position, long id) {
            words.remove(position);
            adapter.notifyDataSetChanged();
        }
    });

}

4 个答案:

答案 0 :(得分:1)

我在我的代码中实现了这样,它适用于我

@Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            // TODO Auto-generated method stub
                MyAdatper adapter=(MyAdatper)parent.getAdapter();
                adapter.remove(myStringArray.get(position));
                adapter.notifyDataSetChanged();

        }

答案 1 :(得分:0)

你应该使用adapter.remove(position)而不是words.remove(position)。 如果你想使用word.remove(position),那么你需要再次将适配器设置为ListView,因为ArrayList单词中有更改的数据。否则你可以使用adapter.remove(pos);方法

答案 2 :(得分:0)

您是否在ArrayList中添加了项目?请添加标识,否则您的代码是完美的。

答案 3 :(得分:0)

似乎“words”数组列表将是您的项侦听器的本地。因此,不要尝试从单词中删除值,而是尝试从适配器本身中删除它。干杯:)