2011-12-24 3 views
2

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

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

 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, но приложение все еще падает.

ответ

1

// внесены изменения в вашем 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(), но прежде чем сделать это обеспечить что поле, добавленное вами с другой деятельностью, также сохраняется в базе данных. вызова показывают данные() из метода 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)); 
} 
+0

, где вы называете метод showData? – user1114720

+0

один вопрос, как вы начинаете добавлять активность? Два шага .. если вы начинаете добавлять Activity через startActivityForResult. 1) вызвать showData() из метода onActivityResult 2) или просто вызвать этот метод из onResume() – AAnkit

+0

установка другого адаптера - плохой подход. вы должны обновить старый адаптер. –

1

Получить переменный уровень класса 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. который будет делать много другой работы и для вас.

Here is a tutorial как использовать SimpleCursorAdapter

+0

Я не могу заставить адаптер работать – user1114720

+0

Я получаю сообщение об ошибке notifyDataSetChanged «метод notifyDataSetChanged не определен для типа ListAdapter» см. Исходный вопрос для кода – user1114720

1

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