Android: обновить ArrayAdapter при возобновлении - PullRequest
2 голосов
/ 24 декабря 2011

Я пытаюсь создать функцию refesh для моей главной страницы. Я искал много сайтов, но я не могу найти (для меня) приемлемый пример. Я загружаю информацию из базы данных sQLLite. Когда я использую свою операцию добавления и возвращаюсь к операции MainScreen, добавленный элемент не отображается. Как я могу обновить эти данные в момент возобновления активности.

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

      public ListView whiskeylist;
      String[] DataArryWhiskey;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // Start db view of whiskey
    DBConfig info = new DBConfig(this);

    info.open();
        DataArryWhiskey = info.getDataInArray();
    info.close();


    whiskeylist = (ListView) findViewById(R.id.listofWhiskey);
    whiskeylist.setOnItemClickListener(this);
    whiskeylist.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, DataArryWhiskey));


}// end onCreate

По совету Адил я изменил код на

      public ListView whiskeylist;
String[] DataArryWhiskey;
ListAdapter Adapter;


@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    // Start db view of whiskey 
    DBConfig info = new DBConfig(this); 

    info.open(); 
         DataArryWhiskey = info.getDataInArray(); 
    info.close(); 


    whiskeylist = (ListView) findViewById(R.id.listofWhiskey); 
    Adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, DataArryWhiskey); 
    whiskeylist.setAdapter(Adapter); 

    // End db view of whiskey


}// end onCreate

@Override
public void onResume() 
{ 
    super.onResume(); 
    DBConfig info = new DBConfig(this); 

    info.open(); 
        DataArryWhiskey = info.getDataInArray(); 
    info.close(); 
    Adapter.notifyDataSetChanged();  // refresh adapter     
} 

однако я получаю сообщение об ошибке notifyDataSetChanged "метод notifyDataSetChanged не определен для типа ListAdapter" <- исправил его, изменив ListAdapter на ArrayAdapter, но приложение по-прежнему падает

Ответы [ 3 ]

1 голос
/ 24 декабря 2011

// внесены изменения в ваш метод oncreate, см. Ниже

DBConfig info;
 @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

// Start db view of whiskey
info = new DBConfig(this);
whiskeylist = (ListView) findViewById(R.id.listofWhiskey);
whiskeylist.setOnItemClickListener(this);
 }// end onCreate

ниже приведен другой метод, вызовите этот метод из ActivityResult (), но перед этим убедитесь, что поле, добавленное вами с другим действиемтакже сохраняется в базе данных.вызовите show Data () из метода onActivityResult или из onResume ()

private void showData()
{
  info.open();
    DataArryWhiskey = info.getDataInArray();
info.close();
 whiskeylist.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, DataArryWhiskey));
}
1 голос
/ 12 мая 2014

Вы можете попробовать использовать adapter.clear(); перед добавлением элементов.

1 голос
/ 24 декабря 2011

Получите переменную уровня класса ArrayAdapter adapter; и инициализируйте ее следующим образом:

adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, DataArryWhiskey);
hiskeylist.setAdapter(adapter);

и внутри onResume() делай так.

public void onResume()
{
    super.onResume();
    info.open();
    DataArryWhiskey = info.getDataInArray();
    info.close();
    adapter.notifyDataSetChanged();  // refresh adapter    
}

Моя рекомендация: Поскольку вы получаете значения из базы данных, используйте SimpleCursorAdapter вместо ArrayAdapter. которая сделает много другой работы и для вас.

Вот учебник как использовать SimpleCursorAdapter

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...