Android:SimpleAdapter notifyOnDataSetChanged不会触发getView

时间:2011-07-12 06:19:57

标签: java android listview simpleadapter

标题几乎说明了一切。我有一个listview由一个简单的适配器和一个xml布局填充,该布局根据listview项目中存在的行数而变化。当我向活动中的一个项目添加数据时,调用notifyondatasetchanged不会更新列表,但是如果我退出活动并返回所有内容,它应该是应该的样子。当我刷新适配器时,我还需要做什么才能更新getview?

    public AlarmListAdapter(Context context, ArrayList<HashMap<String, String>> list, int textViewResourceId, String[] fields, int[] textViewId) {
    super(context, list, textViewResourceId, fields, textViewId);
    this.list = list;
    this.context = context;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

View v = convertView;
if (v == null) {
    LayoutInflater vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    v = vi.inflate(R.layout.alarm_list_item, null);
}


if(list.get(position).get("alert") == null){    
    v.findViewById(R.id.ListViewItemSub).setVisibility(View.GONE);
}

return super.getView(position, convertView, parent);

}


public void forceReload(){
    notifyDataSetChanged();
}

我的活动中的弹出窗口正在调用notifyondatasetchanged。该按钮的代码如下所示:

        addCustomAlertButton = (Button)pView.findViewById(R.id.AddCustomAlertButton);
    addCustomAlertButton.setOnClickListener(new OnClickListener(){
        public void onClick(View v){
            arrayList.get((int) customAlertId).setAlertDialog(customAlertInput.getText().toString());
            Toast.makeText(EditAlarmsActivity.this, "Custom Alert Added", Toast.LENGTH_SHORT).show();
            updateListArray();
            pw.dismiss();
        }

1 个答案:

答案 0 :(得分:0)

您可以尝试setListAdapter(yourAdapter);

listview.requestLayout();

如果那些不起作用,那么你也可以尝试通过滚动刷新列表视图,因为滚动列表视图后会调用getView()函数。