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