如何在安卓中立即刷新自定义适配器列表?

4

我想获取一个标题列表,我的目的是在主页上输入编辑文本后,在单击“确定”按钮后添加到列表中。目前我不知道在主页活动中放置我从customAdapter类调用的刷新方法的位置。

请查看我的HomePage活动:

public class Main_Activity extends Activity implements OnClickListener {
Button ok;
EditText addTasklist;
ListView list_tasklistname;
TodoTask_Database db;
CustomAdapter cAdapter;
List<Tasks> list = new ArrayList<Tasks>();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_layout);
    ok = (Button)findViewById(R.id.add);
    ok.setOnClickListener(this);
    list_tasklistname = (ListView)findViewById(R.id.listview);
    db = new TodoTask_Database(getApplicationContext());
    list = db.getAllTaskList();
    CustomAdapter adapter = new CustomAdapter(Main_Activity.this, R.layout.tasklist_row, list);
    list_tasklistname.setAdapter(adapter);
    /*list_tasklistname.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View v, int position,
                long id) {
        }
    });*/
    db.close();
}
}
@Override
public void onClick(View v) {
    switch(v.getId()) {
    case R.id.add:
        addTasklist = (EditText)findViewById(R.id.addTasklist);
        if(addTasklist!=null) {
             String addtasktitle = addTasklist.getText().toString();
             db = new TodoTask_Database(getApplicationContext());
             db.addTaskList(addtasktitle);
        }
        break;
    }
}
}

自定义适配器:

 public class CustomAdapter extends ArrayAdapter<Tasks> {

    private List<Tasks> dataitem;
    private Activity activity;

public CustomAdapter(Activity a, int textViewResourceId, List<Tasks> items) {
    super(a, textViewResourceId, items);
    this.dataitem = items;
    this.activity = a;
}

public static class ViewHolder{
    public TextView tasklistTitle;
    public TextView createdDate;
    public CheckBox completedflag;
}

   @Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;
    ViewHolder holder;
    if (v == null) {
        LayoutInflater vi =
            (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = vi.inflate(R.layout.tasklist_row, null);
        holder = new ViewHolder();
        holder.tasklistTitle = (TextView) v.findViewById(R.id.tasklistTitle);
        holder.createdDate = (TextView) v.findViewById(R.id.createdDate);
        holder.completedflag = (CheckBox) v.findViewById(R.id.completedflag);
        v.setTag(holder);
    }
    else
        holder=(ViewHolder)v.getTag();

    final Tasks custom = dataitem.get(position);
    if (custom != null) {
        holder.tasklistTitle.setText(custom.getTaskListTitle());
        holder.createdDate.setText(custom.getTaskListCreated());
        holder.completedflag.setText(custom.getTaskListCompletedFlag());
    }
    return v;
}
  // refresh Adapter Method calling in Homepage Activity

   public synchronized void refresAdapter(List<Tasks> dataitems) {   
    dataitem.clear();
    dataitem.addAll(dataitems);
    notifyDataSetChanged();
   }
}

调用 adapter.notifyDatasetChanged() 来刷新列表视图。 - Raghunandan
2个回答

9
onclick 方法中,您可以在 db.addTaskList(addtasktitle); 语句之后调用您的刷新方法 refresAdapter(List<Tasks> dataitems)
或者,您也可以在这个 db.addTaskList(addtasktitle) 语句之后直接写上 adapter.notifyDataSetChanged()

嗨,不,它没有在工作。当我关闭应用程序并在模拟器中重新启动后,它会在列表中显示结果。我想要立即将列表名称添加到列表中。 - Shweta
1
在 adapter.notifyDataSetChanged(); 之后加上 list_tasklistname.setAdapter(adapter);,它就能正常工作了。祝好运 :) - sfdc-neta

-1

调用这个方法:adapter.notifyDatasetChanged()

如果你想在导航抽屉中执行此操作,请在draweropen方法中执行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接