[英]cant update listView (android)
我正在嘗試編寫一些代碼(世界永遠不會知道什么:D),當我嘗試更新列表視圖時,我只是收到一個錯誤....
理論上的代碼:“當我點擊 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)並且在 itemClicked 方法中我輸入了 adapter.clear( )和同樣的事情發生了
好的,我使用 setter 更改了值變量
public void setValues(String[] values) {
this.values = values;
adapter.notifyDataSetChanged();
}
我從 recyclerview(存在於抽屜中)適配器String values[] = {"lel", "uja"}; mainActivity.setValues(values);
String values[] = {"lel", "uja"}; mainActivity.setValues(values);
同樣的崩潰,maybile som1 想撥打 Skype 電話嗎? 我保證,我不會煩人
顯然我畢竟是在創建另一個對象:
MainActivity mainActivity = new MainActivity();
我想知道為什么我可以像這樣訪問該方法:
mainActivity.setValues(values);
所以可能我要問的是:如何在不創建活動的情況下訪問方法?
對於 ArrayAdapter,notifyDataSetChanged 僅在您在適配器上使用add()
、 insert()
、 remove()
和clear()
時才有效。
當一個ArrayAdapter
的構造,它保存了參考List
中傳遞。如果你是這是一個成員的名單傳遞Activity
,並更改活動成員后, 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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.