2015-09-04 60 views
1

我試圖擴展BaseAdapter以使自定義listview。但它說:Android BaseAdapter中預期的方法調用

getCount()方法中預期的方法調用。

我知道這是一個數組,所以如何獲取它?我基本上是這個領域的一個nube。這裏是我的代碼,我曾嘗試申請:

public class customAdapter extends BaseAdapter implements View.OnClickListener { 
    private Context context; 
    private String[] restaurant; 
    private String[] address; 
    private String[] time; 
    private static LayoutInflater layoutInflater = null; 
    public Resources res; 
    int image[]; 
    ListModel tempvalues = null; 
    int i=0; 
    public customAdapter(MainActivity mainActivity, String[] rest, String[] add,String[] tim,int[] img){ 
    restaurant = rest; 
    context=mainActivity; 
    address= add; 
    time = tim; 
    image = img; 
    layoutInflater = (LayoutInflater)context.getSystemService(context.LAYOUT_INFLATER_SERVICE); 
    } 

    @Override 
    public int getCount() { 
    return restaurant.length(); // Method call expected. 
    } 

    @Override 
    public Object getItem(int position) { 
    return position; 
    } 

    @Override 
    public long getItemId(int position) { 
    return position; 
    } 
    public class Holder{ 
    TextView resname; 
    TextView resadd; 
    TextView restim; 
    ImageView imageView; 
    } 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
    Holder holder = new Holder(); 
    View rowview; 
    rowview = layoutInflater.inflate(R.layout.custom_list_view_for_restaurant_names,null); 
    holder.resname = (TextView)rowview.findViewById(R.id.resnameTextView); 
    holder.resadd = (TextView)rowview.findViewById(R.id.address_textview); 
    holder.restim = (TextView)rowview.findViewById(R.id.time_textview); 
    holder.imageView = (ImageView)rowview.findViewById(R.id.imageView); 
    holder.resname.setText(restaurant[position]); 
    holder.resadd.setText(address[position]); 
    holder.restim.setText(time[position]); 
    holder.imageView.setImageResource(image[position]); 
    rowview.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

     } 
    }); 

    return rowview; 
    } 

    @Override 
    public void onClick(View v) { 
    } 
} 
+0

你會得到什麼錯誤? –

+0

錯誤找不到符號方法length() - 這是錯誤 –

+0

讓我知道如果您有任何問題 –

回答

2

變化

return restaurant.length(); 

return restaurant.length; 

餐廳是Array不是List

還有一件事我會喜歡建議你,

不要單獨傳遞這些數組,因爲如果某些數組大小變得小於餐館數組,那麼這將在邏輯上破壞代碼。

我建議你使用一個模型,

如:

public class Event { 

    private String restaurant; 
    private String address; 
    private String time; 
    private int image; 

    //getters and setters 

} 

和傳遞的Event小號

像下面的列表,

 private List<Event> events; 

     public customAdapter(MainActivity mainActivity, List<Event> events){ 

      this.events = events; 
      layoutInflater = (LayoutInflater)context.getSystemService(context.LAYOUT_INFLATER_SERVICE); 
    } 


    @Override 
     public int getCount() { 
     return events.size(); // Method call expected. 
     } 

     @Override 
     public Object getItem(int position) { 
     return events.get(position); 
     } 

     @Override 
     public long getItemId(int position) { 
     return position; 
     } 

和訪問的是,

Event event = events.get(position); 
holder.resname.setText(event.getResturant()); 
    holder.resadd.setText(event.getAddress()); 
    holder.restim.setText(event.getTime()); 
    holder.imageView.setImageResource(event.getImage()); 

而且也

你不應該誇大了ListView元素都應該重用已經膨脹要素的時間。

 View view = convertView; 
     if (view == null) { 
      // if it's not recycled, initialize some attributes 
      LayoutInflater inflater = (LayoutInflater) this.context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      view = inflater.inflate(R.layout.custom_list_view_for_restaurant_names,null); 
     } 
+0

現在我該如何輸入數據到這個listView? –

+0

@Milind您應該從您的Adapter構造函數傳遞一個Event對象列表到您的適配器中。並設置適配器的ListView,得到我的觀點或不? –

相關問題