2015-09-29 2 views
-2

я пытался что-то код (мир никогда не будет знать, что: D), и когда им пытаются обновить ListView я просто получаю сообщение об ошибке ....косяк обновление ListView (андроид)

код в теории: " когда я нажимаю на элемент в NavDrawer окне списка должны получить заполнены конкретными данными»

кода в реальности:

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

, что метод вызывается из этого метода, который exsists в NavDrawerFragment.java

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

} 

Я предполагаю, что это происходит из-за того, что я создаю новый объект, но я просто (в середине ввода сообщения) передал адаптер как параметр метода (и может ввести его в качестве сеттера) и в методе itemClicked, который я напечатал adapter.clear() и такое же дерьмо случилось


Хорошо, я изменил значения 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); 

Так вероятно, я спрашиваю: как получить доступ к методу без создания активности?

+0

Вы вызвали экземпляр нового основного вида деятельности? почему –

+0

Я пытался получить доступ к методу (update()), сегодня я переделал код, я надеялся найти ошибку, и я хотел что-то изменить, прежде чем я не стал создавать экземпляр MainActivity, я забыл, как я (честно говоря, я не думал о том, как получить доступ к методу, когда я его переделывал так пробоподобно, поэтому я его назвал), но в середине ввода сообщения я подумал, что я должен просто попытаться получить доступ к форме адаптера класса antother (метод itemClicked) но такое же shit happend – Zombie

ответ

1

Для ArrayAdapter, notifyDataSetChanged работает только если вы используете add(), insert(), remove() и clear() на адаптере.

Когда ArrayAdapter построен, он держит ссылку на List, который был принят. Если вы должны были пройти в списке, который был членом Activity, и изменить этот элемент активности спустя, ArrayAdapter все еще держатся ссылка на исходный список. Адаптер не знает, что вы изменили List в Activity.

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

, поэтому я должен изменить значения массива и вызвать адаптер.notifyDataSetChanged()? – Zombie

+0

Я знаю, что adapter.notifyDataSetChanged(); делает, я просто тестировал, даже линия вроде notifyDataSetChanged() разбила его – Zombie

+0

i probobly сегодня gona try ur way, im busy atm – Zombie

Смежные вопросы