2013-07-31 15 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,此))添加元素後;

相關問題