2013-07-31 13 views
1

这是我第一次用自定义布局构建Listview,所以如果我错过了某些明显的事情,请指出。如何让我的CustomListAdapter在notifyDatasetChange上更新?

我遇到的问题是,我无法使用Oncreate()后的新信息更新自己的列表视图。已经用过。所以这个列表是非常静态的。

我试图创建一个自定义列表视图适配器,它看起来就像这样:

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(); 


} 


} 

我的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); 

} 

和列表项如下:

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()?

任何帮助深表谢意。

+0

在填充'ShoppingItems'后设置适配器。通常是的,'notifyDataSetChanged()'是用来刷新ListView的。 – gunar

+0

'MainListCustomBaseAdapter adapter = new MainListCustomBaseAdapter(ShoppingItems,this)'然后刷新listview'adapter.notifyDataSetChanged()'。 – Raghunandan

+0

哦,我的GOOOOD!非常感谢你们!呸!我对此感到紧张!谢谢你十亿!有用! – Paul

回答

1

使用下面

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

要刷新或更新列表视图

adapter.notifyDataSetChanged(); 

public void notifyDataSetChanged()

在API级别1

通知所连接的观察者,该底层数据已被更改为 ,任何反映数据集的视图都应刷新自身。

1

把这个线ArrayList中

RecipeList.setAdapter(新MainListCustomBaseAdapter(ShoppingItems,此))添加元素后;

相关问题