如何刷新/自动更新listview查询而不重新调用活动

时间:2016-05-14 07:10:46

标签: java android listview

我创建了一个包含数据库和listView的android应用程序来显示数据库的数据项。在这个应用程序中,用户可以通过在操作栏的相同布局上使用按钮(弹出窗口)在运行时添加数据。要生成添加的项目,我需要调用相同的活动。我的问题是,每当用户添加数据时我想自动生成/刷新listVIew而不重启/调用activity.Here是布局图像Please view image

假设这是主要活动
Gradebook.java

fileSize

并且,这是弹出代码(当用户单击操作栏上的添加按钮时弹出)
Pop_up.java

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.grade_book);
    toolbar=(Toolbar)findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setTitle("Grade Book");
    getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    listView= (ListView) findViewById(R.id.gradeList);
    grade_adapter=new Grade_Adapter(getApplicationContext(),R.layout.grade_book_listview1);
    listView.setAdapter(grade_adapter);
    registerForContextMenu(listView);
    db_operation_helper=new Db_operation_helper(getApplicationContext());
    sqLiteDatabase=db_operation_helper.getReadableDatabase();
    cursor=db_operation_helper.grade_get(sqLiteDatabase);
    if(cursor.moveToFirst())
    {
        do {
            String head;
            head=cursor.getString(0);
            DataProvider dataProvider=new DataProvider(head);
            grade_adapter.add(dataProvider);

        }while (cursor.moveToNext());
    }
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Toast.makeText(getBaseContext(),"YOU",Toast.LENGTH_LONG).show();
            view.setSelected(true);
        }
    });
}

这里是Database.java代码(数据由合同类输入)

public class Grade_pop extends AppCompatActivity {

EditText semorclass;
//    Db_operation_helper grade_db_helper is the class of db opertion
Db_operation_helper grade_db_helper;
SQLiteDatabase sqLiteDatabase;
Context context=this;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.grade_pop);
    DisplayMetrics dm=new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);
    int width,height;
    width=dm.widthPixels;
    height=dm.heightPixels;
    getWindow().setLayout((int) (width * .4), (int) (height * .155));
    semorclass= (EditText) findViewById(R.id.semester);
}
public void additems(View view){

    String sem=semorclass.getText().toString();
    grade_db_helper=new Db_operation_helper(context);
    sqLiteDatabase=grade_db_helper.getWritableDatabase();

        grade_db_helper.grade_add(sem, sqLiteDatabase);
        Toast.makeText(getBaseContext(), "Data is saved", Toast.LENGTH_LONG).show();
        grade_db_helper.close();
// Here i recall the activity by intent 
        startActivity(new Intent(this, Grade_book.class));
        finish();
}

3 个答案:

答案 0 :(得分:2)

在Sqlite中插入数据后,您可以尝试在notifyDataSetChanged()活动listView中调用onResume();来完成广告活动。

像这样

@Override
public void onResume(){
super.onResume();
//here you can update the adapter just call notify methods
 grade_adapter.notifyDataSetChanged();

}

答案 1 :(得分:0)

这样做会修改您的活动代码,如下所示:

@Override
protected void onResume() {
    super.onResume();

    listView.setAdapter(grade_adapter);
    db_operation_helper=new Db_operation_helper(getApplicationContext());
    sqLiteDatabase=db_operation_helper.getReadableDatabase();
    cursor=db_operation_helper.grade_get(sqLiteDatabase);
    if(cursor.moveToFirst())
    {
      do {
           String head;
           head=cursor.getString(0);
           DataProvider dataProvider=new DataProvider(head);
           grade_adapter.add(dataProvider);
           grade_adapter.notifyDataSetChanged();
         }while (cursor.moveToNext());
     }

}

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.grade_book);
toolbar=(Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle("Grade Book");
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

listView= (ListView) findViewById(R.id.gradeList);
grade_adapter=new Grade_Adapter(getApplicationContext(),R.layout.grade_book_listview1);

registerForContextMenu(listView);    

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Toast.makeText(getBaseContext(),"YOU",Toast.LENGTH_LONG).show();
        view.setSelected(true);
    }
});
}

不要在你的pop_up中调用startActivity()。像这样修改addItems():

public void additems(View view){

String sem=semorclass.getText().toString();
grade_db_helper=new Db_operation_helper(context);
sqLiteDatabase=grade_db_helper.getWritableDatabase();

    grade_db_helper.grade_add(sem, sqLiteDatabase);
    Toast.makeText(getBaseContext(), "Data is saved", Toast.LENGTH_LONG).show();
    grade_db_helper.close();
    finish();
}

答案 2 :(得分:-2)

如果要刷新ListView,请调用grade_adapter.notifyDataSetChanged();