Как я могу перезагрузить действие из listview для обновления информации базы данных?

#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