无法更新listView(android)

时间:2015-09-29 16:28:21

标签: java android listview android-listview

我正在尝试编写代码(世界永远不会知道:D),当我试图更新listview时,我只是收到错误....

理论上的代码:"当我点击NavDrawer中的项目时,listView应该填充特定数据"

现实中的代码:

public class MainActivity extends AppCompatActivity {
ArrayAdapter<String> adapter;
String[] values;

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


    ListView listview = (ListView) findViewById(R.id.listview);
    values = new String[]{"Android", "iPhone", "WindowsMobile",
            "Blackberry", "WebOS", "Ubuntu", "Windows7"};
    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, values);
    listview.setAdapter(adapter);
}
public void update(){
    adapter.clear();
    adapter.notifyDataSetChanged();
}

从NavDrawerFragment.java中存在的此方法调用该方法

@Override
public void itemClicked(View view, int position) {
    Toast.makeText(getActivity(), "shit is going down", Toast.LENGTH_LONG).show();
    new MainActivity().update();

}

我猜它正在发生,因为我正在创建一个新对象,但我只是(在键入帖子的中间)传递适配器作为方法参数(你可以将其作为一个setter inma)和在itemClicked方法中我输入了适配器.clear()和同样的事情发生了

好吧,我使用setter改变了值varible

 public void setValues(String[] values) {
    this.values = values;
    adapter.notifyDataSetChanged();
} 

我从recyclerview(存在于抽屉中)适配器中调用它 String values[] = {"lel", "uja"}; mainActivity.setValues(values); 所以同样崩溃,maybile som1想上skype电话?我保证,我不会讨厌

显然我毕竟是在创造另一个对象:

 MainActivity mainActivity = new MainActivity();

我想知道为什么我可以像这样访问这个方法:

mainActivity.setValues(values);

所以我可能要问的是:如何在不创建活动的情况下访问方法?

1 个答案:

答案 0 :(得分:1)

对于ArrayAdapter,只有在适配器上使用add()insert()remove()clear()时,notifyDataSetChanged才有效。

构建ArrayAdapter时,它会保留传入的List的引用。如果要传入属于Activity成员的List,并且稍后更改该活动成员,ArrayAdapter仍然保留对原始列表的引用。适配器不知道您更改了活动中的列表。

 @Override
    public void itemClicked(View view, int position) {
        //filter your list i.e `values` based on on item click,clearing it and adding new values
        adapter.notifyDataSetChanged();
    }