2011-05-24 36 views
3

我有一個使用GridView與CustomAdapter(擴展BaseAdapter)的問題。Android GridView自定義BaseAdapter ImageView ImageButton OnItemClick不工作

  • 我的活動實現了OnItemClickListener。
  • 如果我使用的ImageView作爲項目一切正常,OnItemClick事件將被解僱/逮住

我還沒有找到一個有用的例子,對於使用的ImageButton定製BaseAdapter一個GridView。 有沒有人有想法?

摘錄:

class MyActivity extends Activity implements OnItemClickListener { 
    ... 
    @Override 
    public void onCreate() { 
    ... 
    GridView gridview = (GridView) findViewById(R.id.gridview); 
    gridview.setOnItemClickListener(this); 
    gridview.setAdapter(new ImageButtonAdapter(this)); 
    } 
    ...  
    @Override 
    public void onItemClick(AdapterView<?> adapter, View view, int arg2, long arg3) 
    { 
    Log.e("onItemClick()", "arg2=" + arg2 + ", arg3=" + arg3); 
    } 
} 


public class ImageButtonAdapter extends BaseAdapter 
{ 
    private Context mContext; 

    public LayoutMenuAdapter(Context c) 
    { 
    mContext = c; 
    } 

    public int getCount() 
    { 
    return mThumbIds.length; 
    } 

    public Object getItem(int position) 
    { 
    return null; 
    } 

    public long getItemId(int position) 
    { 
    return 0; 
    } 

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

    /* IF I USE THIS PART EVERYTHING WORKS FINE */ 

    // ImageView imageView; 
    // if (convertView == null) { 
    // imageView = new ImageView(mContext); 
    // imageView.setLayoutParams(new GridView.LayoutParams(100, 100)); 
    // imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
    // imageView.setPadding(0, 0, 0, 0); 
    // imageView.setFocusable(false); 
    // } else { 
    // imageView = (ImageView) convertView; 
    // } 
    // imageView.setImageResource(mThumbIds[position]); 
    // return imageView; 

    /* IF I USE THIS PART NO THE ACTIVITY/LISTENER RECEIVES NO EVENT */ 

    ImageButton imageButton; 
    if (convertView == null) { 
     imageButton = new ImageButton(mContext); 
     imageButton.setLayoutParams(new GridView.LayoutParams(100, 100)); 
     imageButton.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     imageButton.setPadding(0, 0, 0, 0); 
     imageButton.setFocusable(false); 
    } else { 
     imageButton = (ImageButton) convertView; 
    } 
    imageButton.setImageResource(mThumbIds[position]); 
    return imageButton; 
    } 

    // references to images 
    private Integer[] mThumbIds = { R.drawable.media}; 
} 
+0

您看到了什麼樣的錯誤(請發佈)?作爲快速概述,這看起來是足夠的。 – AedonEtLIRA 2011-05-24 16:30:24

+0

沒有錯誤消息,Listener沒有按預期工作。由於OnItemClickListener綁定到了GridView,所以這是一個初學者自己想的錯誤。如果我喜歡使用ImageButton,OnClickListener必須綁定到每個按鈕(請參見下面)......還是非常感謝! – Marek 2011-05-25 07:41:59

回答

1

內getView()實現OnClickListener .....

Class MyActivity extends Activity implements OnItemClickListener { 
     ... 
     @Override 
     public void onCreate() { 
     ... 
     GridView gridview = (GridView) findViewById(R.id.gridview); 
     gridview.setOnItemClickListener(this); 
     gridview.setAdapter(new ImageButtonAdapter(this)); 
     } 
     ...  
    // @Override 
    // public void onItemClick(AdapterView<?> adapter, View view, int arg2, long arg3) 
    // { 
     // Log.e("onItemClick()", "arg2=" + arg2 + ", arg3=" + arg3); 
    // } 
    } 


    public class ImageButtonAdapter extends BaseAdapter 
    { 
     private Context mContext; 

     public LayoutMenuAdapter(Context c) 
     { 
     mContext = c; 
     } 

     public int getCount() 
     { 
     return mThumbIds.length; 
     } 

     public Object getItem(int position) 
     { 
     return null; 
     } 

     public long getItemId(int position) 
     { 
     return 0; 
     } 

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

     /* IF I USE THIS PART EVERYTHING WORKS FINE */ 

     // ImageView imageView; 
     // if (convertView == null) { 
     // imageView = new ImageView(mContext); 
     // imageView.setLayoutParams(new GridView.LayoutParams(100, 100)); 
     // imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     // imageView.setPadding(0, 0, 0, 0); 
     // imageView.setFocusable(false); 
     // } else { 
     // imageView = (ImageView) convertView; 
     // } 
     // imageView.setImageResource(mThumbIds[position]); 
     // return imageView; 

     /* IF I USE THIS PART NO THE ACTIVITY/LISTENER RECEIVES NO EVENT */ 

     ImageButton imageButton; 
     if (convertView == null) { 
      imageButton = new ImageButton(mContext); 
      imageButton.setLayoutParams(new GridView.LayoutParams(100, 100)); 
      imageButton.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      imageButton.setPadding(0, 0, 0, 0); 
      imageButton.setFocusable(false); 
     } else { 
      imageButton = (ImageButton) convertView; 
     } 
     imageButton.setImageResource(mThumbIds[position]); 
     imageButton.setOnClickListener(new OnClickListener(){ 

      public void onClick(View arg0) { 

       Log.e("onClick()", position); 

     } 

     }); 
     return imageButton; 
     } 

     // references to images 
     private Integer[] mThumbIds = { R.drawable.media}; 
    } 
+0

非常感謝!這對我很有幫助! – Marek 2011-05-25 07:50:17

1

您的幫助非常感謝,現在我的活動僅實現OnClickListener至極將被傳遞給通過ctor的適配器並綁定到每個按鈕:

class MyActivity extends Activity implements OnClickListener { 
    ... 
    @Override 
    public void onCreate() { 
    ... 
    GridView gridview = (GridView) findViewById(R.id.gridview); 
    // gridview.setOnItemClickListener(this); // removed 
    gridview.setAdapter(new ImageButtonAdapter(this, this)); 
    } 
    ...  
    @Override 
    public void onClick(View view) 
    { 
    Log.i("onClick()", "view=" + view); 
    } 
} 


public class ImageButtonAdapter extends BaseAdapter 
{ 
    private Context mContext; 

    private OnClickListener mListener; 

    public LayoutMenuAdapter(Context c, OnClickListener l) 
    { 
    mContext = c; 
    mListener = l; 
    } 

    public int getCount() 
    { 
    return mThumbIds.length; 
    } 

    public Object getItem(int position) 
    { 
    return null; 
    } 

    public long getItemId(int position) 
    { 
    return 0; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) 
    { 
    ImageButton imageButton; 
    if (convertView == null) { 
     imageButton = new ImageButton(mContext); 
     imageButton.setLayoutParams(new GridView.LayoutParams(100, 100)); 
     imageButton.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     imageButton.setPadding(0, 0, 0, 0); 
     imageButton.setFocusable(false); 
    } else { 
     imageButton = (ImageButton) convertView; 
    } 
    imageButton.setImageResource(mThumbIds[position]); 
    imageButton.setOnClickListener(mListener); 
    return imageButton; 
    } 

    // references to images 
    private Integer[] mThumbIds = { R.drawable.media}; 
} 
相關問題