0
我有listview
和dialog
。我必须从dialog
接收三个输入并在listview
中执行它,对此我有一个sqlitedatabase
。我正在使用customised adapter
来插入listview
中的条目。但是,无论何时在dialog
中插入条目后点击save button
,database
以及listview
都会更新,但是当屏幕上显示listview
时,不会显示我申请的条目adapter.notifyDataSetChanged()
,但它不起作用。有什么建议么?ListView在数据库中输入元素后没有更新
的save button
的功能:
save_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
selectedModel=new Model();
selectedModel.setTask_title(task_Title.getText().toString());
selectedModel.setTask_description(task_Description.getText().toString());
selectedModel.setTask_date(task_Date.getText().toString());
db.insertTask(selectedModel);
Toast.makeText(getApplicationContext(),"model ="+selectedModel.getTask_title(),Toast.LENGTH_LONG).show();
Log.i("Second Screen","list length before "+list.size());
list=db.getAllTasks();
Log.i("Second Screen","list length after "+list.size());
Adapter adapter =(Adapter)getListView().getAdapter();
adapter.notifyDataSetChanged();
//Toast.makeText(getApplicationContext(),"model ="+selectedModel.getTask_title(),Toast.LENGTH_LONG).show();
dialog.dismiss();
}
});
,我定义的所有功能的主类:
public class SecondScreen extends ListActivity implements AppCompatCallback,AdapterView.OnItemClickListener {
private Toolbar bar;
private AppCompatDelegate delegate;
List<Model> list;
Model selectedModel;
AGSQLiteHelper db;
Adapter adapter;
private EditText task_Title,task_Description,task_Date;
@Override
protected void onCreate(Bundle savedInstanceState) {
delegate=AppCompatDelegate.create(this,this);
super.onCreate(savedInstanceState);
delegate.setContentView(R.layout.activity_second_screen);
bar=(Toolbar)findViewById(R.id.toolbarID);
delegate.setSupportActionBar(bar);
ActionBar ab=delegate.getSupportActionBar();
ab.setDisplayHomeAsUpEnabled(true);
db=new AGSQLiteHelper(this);
db.onUpgrade(db.getWritableDatabase(),1,2);
db.createTask(new Model("abcde","description abcde","19/11/12"));
db.createTask(new Model("bcdese","description bcdese","18/12/12"));
db.createTask(new Model("mnbv","description mnbv","2/11/10"));
db.createTask(new Model("poiuy","description poiuy","1/5/6"));
list=db.getAllTasks();
adapter=new Adapter(this,R.layout.row,list);
getListView().setOnItemClickListener(this);
setListAdapter(adapter);
}
@Override
public void onSupportActionModeStarted(ActionMode mode) {
}
@Override
public void onSupportActionModeFinished(ActionMode mode) {
}
@Nullable
@Override
public ActionMode onWindowStartingSupportActionMode(ActionMode.Callback callback) {
return null;
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId()==R.id.add){
Toast.makeText(getApplicationContext(),"Add was clicked",Toast.LENGTH_LONG).show();
final Dialog dialog=new Dialog(SecondScreen.this);
dialog.setContentView(R.layout.custom_dialog);
dialog.setTitle("Dialog");
Button save_button=(Button)dialog.findViewById(R.id.saveButtonID);
Button cancel_button=(Button)dialog.findViewById(R.id.cancelButtonID);
task_Title=(EditText)dialog.findViewById(R.id.titleEditTextID);
task_Description=(EditText)dialog.findViewById(R.id.descriptionEditTextID);
task_Date=(EditText)dialog.findViewById(R.id.dateEditTextID);
dialog.show();
save_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
selectedModel=new Model();
selectedModel.setTask_title(task_Title.getText().toString());
selectedModel.setTask_description(task_Description.getText().toString());
selectedModel.setTask_date(task_Date.getText().toString());
db.insertTask(selectedModel);
Toast.makeText(getApplicationContext(),"model ="+selectedModel.getTask_title(),Toast.LENGTH_LONG).show();
Log.i("Second Screen","list length before "+list.size());
list=db.getAllTasks();
Log.i("Second Screen","list length after "+list.size());
Adapter adapter =(Adapter)getListView().getAdapter();
adapter.notifyDataSetChanged();
//Toast.makeText(getApplicationContext(),"model ="+selectedModel.getTask_title(),Toast.LENGTH_LONG).show();
dialog.dismiss();
}
});
cancel_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
}
if(item.getItemId()==R.id.done){
Toast.makeText(getApplicationContext(),"Done was clicked",Toast.LENGTH_LONG).show();
}
return true;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu,menu);
return true;
}
}
我已经使用Log
和Toast
检查是否listView
和database
正在更新与否。
的customised adapter
类:
public class Adapter extends ArrayAdapter<Model> {
Context context;
int layoutResourceID;
List<Model> data=null;
public Adapter(Context context, int layoutResourceID,List<Model> data) {
super(context, layoutResourceID, data);
//super(context,layoutResourceID);
this.layoutResourceID=layoutResourceID;
this.context=context;
this.data=data;
}
@NonNull
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row=convertView;
ModelHolder holder=null;
if(row==null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceID, parent, false);
holder = new ModelHolder();
holder.t_title = (TextView) row.findViewById(R.id.tasktitleTextID);
holder.t_descrip = (TextView) row.findViewById(R.id.taskdescriptionTextID);
holder.t_date = (TextView) row.findViewById(R.id.taskdateTextID);
row.setTag(holder);}
else {
holder=(ModelHolder)row.getTag();
}
//Model model=new Model();
holder.t_title.setText(data.get(position).getTask_title());
holder.t_descrip.setText(data.get(position).getTask_description());
holder.t_date.setText(data.get(position).getTask_date());
return row;
}
class ModelHolder{
TextView t_title,t_descrip,t_date;
}
}
雅,我已经添加'名单= db.getAllTasks();'notifyDataSetChanged前'()' 。它没有工作。 –
Adapter adapter =(Adapter)getListView()。getAdapter(); 您正在使用之前的适配器值再次更新适配器,该列表又在哪里添加到适配器? – Mrinmoy
我注释了'Adapter adapter =(Adapter)getListView()。getAdapter();'但仍然不能工作,请您详细说明我该怎么做? –