#android #database #listview #return #reload
#Android #База данных #listview #Возврат #перезагрузка
Вопрос:
Я пытаюсь реализовать что-то вроде этого:
У меня есть основной класс с макетом, откуда я получаю некоторые данные из базы данных и отображаю их, как показано на изображении (с другим макетом complex_list):
public class main_class extends Activity{
DatabaseHelper myDB;
ListView list;
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
myDB=new DatabaseHelper(this);
list = (ListView) findViewById(R.id.list);
Cursor res = myDB.getAllData();
if (res.getCount()==0){
Toast.makeText(this,R.string.nothing_found,Toast.LENGTH_LONG).show();
}
else{
...
list.setAdapter(new listAdapter(..., this.getBaseContext()));
}
У меня есть класс для реализации BaseAdapter:
class listAdapter extends BaseAdapter {
public View getView(final int position, View convertView, final ViewGroup parent) {
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE );
View row;
row = inflater.inflate(R.layout.complex_list, parent, false);
...
Delete = (Button) row.findViewById(R.id.delete_entry_list);
...
Delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
deleteEntry(id[position]);
Intent refresh = new Intent(context, main_class.class);
refresh.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //I've added this line because otherwise I get an error an the app crashes.
context.startActivity(refresh);
//((Activity)context).finish();
}
});
return (row);
}
public void deleteEntry ( int id){
DatabaseHelper myDB = new DatabaseHelper(context);
myDB.deleteData(Integer.toString(id));
}
То, что я пытаюсь сделать, — это обновить все действие после нажатия кнопки удаления, чтобы увидеть обновленную версию базы данных.
То, что я написал, действительно работает, но когда я нажимаю кнопку возврата в телефоне, он возвращается к старому изображению базы данных вместо перехода в меню, из которого я получил доступ к этому действию.
Я изучал похожие вопросы, и единственное решение, которое я нашел, — добавить строку, которая прокомментирована:
//((Activity)context).finish();
Но это приводит к сбою моего приложения с этой ошибкой:
java.lang.ClassCastException: android.app.ContextImpl cannot be cast to android.app.Activity
Может ли кто-нибудь дать мне подсказку о том, что я делаю неправильно, или если есть более простой способ сделать это?
Комментарии:
1. Заменить
this.getBaseContext()
наthis
. Действие уже является контекстом2. Спасибо, это была проблема. Теперь он работает правильно.
Ответ №1:
ClassCastException: android.app.ContextImpl cannot be cast to android.app.Activity
Вероятно, начинается с
list.setAdapter(new listAdapter(..., this.getBaseContext()));
Вы должны использовать this
вместо this.getBaseContext()
там как Activity extends Context