Обновление списка Android - PullRequest
0 голосов
/ 23 мая 2011

В моем приложении, когда пользователь нажимает кнопку меню ДОБАВИТЬ, появляется список, заполненный элементами, которые загружаются из текстового файла. Теперь пользователь может добавить еще один элемент в список. После добавления его в массив новый элемент записывается в текстовый файл, но не попадает в просмотр списка, так как я хочу сделать это, читая файл в массив, а затем заполняя им ListView. Проблема в том, что это не работает. Заполнение массива происходит в методе onCreate (Bundle saveInstanceState) {}, но добавление происходит вне его, как это вызывается нажатием меню.

public class Connection extends Activity {
ListView lv1;
ArrayList<String> assignArr0 = new ArrayList<String>();
ArrayList<String> assignArr00 = new ArrayList<String>();
ArrayAdapter<String> adapter1;
ArrayAdapter<String> adapter2;

public void onCreate(Bundle savedInstanceState) {
...
//filereading to assingArr0. Lines of the file are added to the listview.
lv1 = (ListView) findViewById(R.id.ListView01);
adapter1 = new ArrayAdapter<String>(Connection.this,R.layout.list_black_text,R.id.list_content, assignArr0);
lv1.setAdapter(adapter1);
adapter1.notifyDataSetChanged();

//now, if there were any lines in the text file, the ListView is populated with them.
}

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.Menu1:
//this is where user adds an item to an array and item gets written out to the text file
//and this is also the part where the listview should be cleared, the lines of the text file should be read into an array, and the listview should be populated with the items of that array.

//The filereading is ok. Lines are read into assignArr00. Now what?

 break;
    }
    return true;
}
}

Так я пытался сделать это после того, как строки были прочитаны в assignArr00:

 if (fileisempty == false) //i set this boolean var at the beginning
          {
              adapter1.clear();
            //  adapter1 = new ArrayAdapter<String>(Connection.this,R.layout.list_black_text,R.id.list_content, assignArr00);
              //lv1.setAdapter(adapter1);
              //adapter1.notifyDataSetChanged();
          }
          else
          {
              adapter1 = new ArrayAdapter<String>(Connection.this,R.layout.list_black_text,R.id.list_content, assignArr00);
              lv1.setAdapter(adapter1);
              adapter1.notifyDataSetChanged();
              }
          }

Остальная часть этого последнего кода приводит к принудительному закрытию (не забывайте, что это первый запуск, поэтому текстовый файл пустой, поэтому активируется другая часть.

Я не очень уверен во всем этом. Может быть, декларации не в том месте.

Любая помощь приветствуется.

Редактировать: мне удалось решить это. Решение можно найти ниже.

1 Ответ

0 голосов
/ 24 мая 2011

Нашел решение: мне пришлось заново объявить lv1 = (ListView) findViewById(R.id.ListView01); У меня нет причины, но это стоило мне 4 часа, чтобы выяснить это.

if (fileisempty == false)
              {
                  adapter1.clear();
                  adapter1.notifyDataSetChanged();
                  lv1 = (ListView) findViewById(R.id.ListView01);
                  ArrayAdapter<String> adapter11;
                  adapter11 = new ArrayAdapter<String>(Connection.this,R.layout.list_black_text,R.id.list_content, assignArr00);
                  lv1.setAdapter(adapter11);
                  adapter11.notifyDataSetChanged();

              }
              else
              {
                  lv1 = (ListView) findViewById(R.id.ListView01);
                  ArrayAdapter<String> adapter11;
                  adapter11 = new ArrayAdapter<String>(Connection.this,R.layout.list_black_text,R.id.list_content, assignArr00);
                  lv1.setAdapter(adapter11);
                  adapter11.notifyDataSetChanged();
              }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...