如何让我的Custom ListAdapter更新notifyDatasetChanged?

时间:2013-07-31 11:48:21

标签: android listview notifydatasetchanged

这是我第一次使用自定义布局构建Listview,所以如果我错过了一些明显的东西,请指出它。

我遇到的问题是我无法让listview在Oncreate()之后用新信息更新自己;已经用过。因此列表非常静态。

我正在尝试创建一个看起来像这样的自定义listview适配器:

public class MainListCustomBaseAdapter extends BaseAdapter {

static ArrayList<ListItems> DataSomething;
static Context Cont;

public MainListCustomBaseAdapter (ArrayList<ListItems> data, Context c){
    DataSomething = data;
    Cont = c;
}

public int getCount() {
    // TODO Auto-generated method stub
    return DataSomething.size();
}

public Object getItem(int position) {
    // TODO Auto-generated method stub
    return DataSomething.get(position);
}

public long getItemId(int position) {
    // TODO Auto-generated method stub
    return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
     View v = convertView;
     if (v == null)
     {
        LayoutInflater vi = (LayoutInflater)Cont.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = vi.inflate(R.layout.mainlistlayout, null);
     }

       ImageView image = (ImageView) v.findViewById(R.id.ListImage);
       TextView titleView = (TextView)v.findViewById(R.id.title);
       TextView DetailItemView = (TextView)v.findViewById(R.id.DetailItem);


       ListItems msg = DataSomething.get(position);
       image.setImageResource(msg.icon);
       titleView.setText(msg.title);
       DetailItemView.setText("ItemDetails: "+msg.ItemDetails);


    return v;
}

public void updateResults(ArrayList<MainListCustomBaseAdapter> results){
    notifyDataSetChanged();


}


}

My Oncreate看起来像这样:

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


   RecipeList = (ListView) findViewById(R.id.mainListView);

    ShoppingItems = new ArrayList<ListItems>();
    RecipeList.setAdapter(new MainListCustomBaseAdapter(ShoppingItems, this));

    ListItems Detail;
    Detail = new ListItems();
    Detail.setIcon(R.drawable.food);
    Detail.setName("Food Stuff");
    Detail.setItemDetails("ItemDetailsComp");
    ShoppingItems.add(Detail);

}

和listitem看起来像这样:

public class ListItems {
        public int icon ;
        public String title;
        public String ItemDetails;


        public String getName() {
            return title;
        }

        public void setName(String from) {
            this.title = from;
        }

        public String getItemDetails() {
            return ItemDetails;
        }

        public void setItemDetails(String ItemDetailsComp) {
            this.ItemDetails = ItemDetailsComp;
        }

        public int getIcon() {
            return icon;
        }

        public void setIcon(int icon) {
            this.icon = icon;
        }

}

如何让listview动态更新?可能是SetInvalidatedViews()或notifyDatasetchanged()?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

使用以下

   MainListCustomBaseAdapter adapter = new MainListCustomBaseAdapter(ShoppingItems, this)
   RecipeList.setAdapter(adapter);

刷新或更新listview

   adapter.notifyDataSetChanged();

public void notifyDataSetChanged ()

在API级别1中添加

  

通知附加的观察者基础数据已经存在   已更改,任何反映数据集的视图都应自行刷新。

答案 1 :(得分:1)

在arraylist

中添加元素后添加此行

RecipeList.setAdapter(new MainListCustomBaseAdapter(ShoppingItems,this));