2013-11-02 22 views
0

Im實現ViewHolder。即時通訊使用此嘖嘖:Link實現ViewHolder的問題,ObjectItem無法解析爲類型

這是代碼:

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

     ViewHolder viewHolder; 

     /* 
     * The convertView argument is essentially a "ScrapView" as described is Lucas post 
     * http://lucasr.org/2012/04/05/performance-tips-for-androids-listview/ 
     * It will have a non-null value when ListView is asking you recycle the row layout. 
     * So, when convertView is not null, you should simply update its contents instead of inflating a new row layout. 
     */ 
     if(convertView==null){ 

      // inflate the layout 
      LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
      convertView = inflater.inflate(position, parent, false); 

      // well set up the ViewHolder 
      viewHolder = new ViewHolder(); 
      viewHolder.title = (TextView) convertView.findViewById(R.id.title); 
      viewHolder.image= (ImageView) convertView.findViewById(R.id.image); 

      // store the holder with the view. 
      convertView.setTag(viewHolder); 

     }else{ 
      // we've just avoided calling findViewById() on resource everytime 
      // just use the viewHolder 
      viewHolder = (ViewHolder) convertView.getTag(); 
     } 

     // object item based on the position 
     ObjectItem objectItem = data[position]; 

     // assign values if the object is not null 
     if(objectItem != null) { 
      // get the TextView from the ViewHolder and then set the text (item name) and tag (item ID) values 
      viewHolder.title.setText(objectItem.itemName); 
      viewHolder.title.setTag(objectItem.itemId); 
     } 

     return convertView; 

    } 

現在的問題是,我不知道什麼是「ObjectItem」。那個班從哪裏來的?

也不識別同一行上的「數據」。

我應該怎麼做?本教程不解釋它..

謝謝!

+0

我想你還沒有關注該博客的完整。檢查我的帖子 – Raghunandan

回答

0

ObjectItem是數據的包裝。從你寫的東西,我可以看到:

public class ObjectItem { 
String itemName; 
String itemId; 
} 

,你可以往裏面放,這樣說:

ObjectItem[] data = new ObjectItem[10]; 
for (int i = 0; i < 10; i++) { 
    ObjectItem tmp = new ObjectItem(); 
    tmp.itemName = "name_"+i 
    tmp.itemId = "id_"+i; 
    data[i] = tmp; 
} 
0

看看在同一博客的一個鏈接。它是我的一個延續,所以你需要查看以前的文章並閱讀完整的博客。

http://www.codeofaninja.com/2013/09/android-listview-with-adapter-example.html

//another class to handle item's id and name 
public class ObjectItem { 

    public int itemId; 
    public String itemName; 

    // constructor 
    public ObjectItem(int itemId, String itemName) { 
     this.itemId = itemId; 
     this.itemName = itemName; 
    } 

} 

而對於使用H應用下面的填充(使用for循環是較好的)

ObjectItem[] ObjectItemData = new ObjectItem[20]; 

    ObjectItemData[0] = new ObjectItem(91, "Mercury"); 
    ObjectItemData[1] = new ObjectItem(92, "Watson"); 
    ObjectItemData[2] = new ObjectItem(93, "Nissan"); 
    ObjectItemData[3] = new ObjectItem(94, "Puregold"); 
    ObjectItemData[4] = new ObjectItem(95, "SM"); 
    ObjectItemData[5] = new ObjectItem(96, "7 Eleven"); 
    ObjectItemData[6] = new ObjectItem(97, "Ministop"); 
    ObjectItemData[7] = new ObjectItem(98, "Fat Chicken"); 
    ObjectItemData[8] = new ObjectItem(99, "Master Siomai"); 
    ObjectItemData[9] = new ObjectItem(100, "Mang Inasal"); 
    ObjectItemData[10] = new ObjectItem(101, "Mercury 2"); 
    ObjectItemData[11] = new ObjectItem(102, "Watson 2"); 
    ObjectItemData[12] = new ObjectItem(103, "Nissan 2"); 
    ObjectItemData[13] = new ObjectItem(104, "Puregold 2"); 
    ObjectItemData[14] = new ObjectItem(105, "SM 2"); 
    ObjectItemData[15] = new ObjectItem(106, "7 Eleven 2"); 
    ObjectItemData[16] = new ObjectItem(107, "Ministop 2"); 
    ObjectItemData[17] = new ObjectItem(108, "Fat Chicken 2"); 
    ObjectItemData[18] = new ObjectItem(109, "Master Siomai 2"); 
    ObjectItemData[19] = new ObjectItem(110, "Mang Inasal 2"); 

並在第二鏈路的繼續使用視圖支架圖案

http://www.javacodegeeks.com/2013/09/android-viewholder-pattern-example.html

public void showPopUp(){ 

    // we'll specify the number of items we want our ListView to have. 
    int numberOfItems = 1000; 

    // add your items, this can be done programatically 
    // your items can be from a database 
    ObjectItem[] ObjectItemData = new ObjectItem[numberOfItems]; 

    // we'll use a for loop 
    // created objects = number of items specified above 
    for(int x=0; x<numberOfItems; x++){ 

     int sampleId = 90 + x; 
     ObjectItemData[x] = new ObjectItem(sampleId, "Store # " + (x+1)); 

    } 

    // our adapter instance 
    ArrayAdapterItem adapter = new ArrayAdapterItem(this, R.layout.list_view_row_item, ObjectItemData); 

    // create a new ListView, set the adapter and item click listener 
    ListView listViewItems = new ListView(this); 
    listViewItems.setAdapter(adapter); 
    listViewItems.setOnItemClickListener(new OnItemClickListenerListViewItem()); 

    // put the ListView in the pop up 
    alertDialogStores = new AlertDialog.Builder(MainActivity.this) 
     .setView(listViewItems) 
     .setTitle("Stores") 
     .show(); 

} 

所以,你需要按照2個鏈接

  1. http://www.codeofaninja.com/2013/09/android-listview-with-adapter-example.html

  2. http://www.javacodegeeks.com/2013/09/android-viewholder-pattern-example.html