2016-12-24 57 views
0

我有listviewdialog。我必须从dialog接收三个输入并在listview中执行它,对此我有一个sqlitedatabase。我正在使用customised adapter来插入listview中的条目。但是,无论何时在dialog中插入条目后点击save buttondatabase以及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; 
} 

}

我已经使用LogToast检查是否listViewdatabase正在更新与否。

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; 
} 

}

回答

0
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.add(selectedModel); 

       Log.i("Second Screen","list length after "+list.size()); 

       adapter.notifyDataSetChanged(); 

      } 
     }); 

试试这一次

+0

雅,我已经添加'名单= db.getAllTask​​s();'notifyDataSetChanged前'()' 。它没有工作。 –

+0

Adapter adapter =(Adapter)getListView()。getAdapter(); 您正在使用之前的适配器值再次更新适配器,该列表又在哪里添加到适配器? – Mrinmoy

+0

我注释了'Adapter adapter =(Adapter)getListView()。getAdapter();'但仍然不能工作,请您详细说明我该怎么做? –