0

各項目内に TextView と ImageView を持つ Gridview を設計しています。ImageView をクリック可能にする方法と GridView アイテム自体 (両方とも異なるメソッド () をトリガーする) についてのチュートリアル (更新され、明確なステップバイステップのもの) を見つけようとしました。

これは私がこれまでに持っているものです:

アクティビティ.java

String[] newList;
for(int i=0; i < 6; i++ {
    newList[i] = "Item" + i;
}

GridView GV = (GridView) getActivity().findViewById(R.id.sexp_fav);
GV.setAdapter(new GVAdapter(getActivity(), newList)); // passing Activity and List data to adapter
GV.setOnItemClickListener(new AdapterView.OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView arg0, 
        View arg1, int position, long arg3) {

    }
});

GVAdapter.java

public class GVAdapter extends BaseAdapter {

    private Context mContext;
    private LayoutInflater mInflator;

    String mEntries[];   
    public GVAdapter (Context context, String[] entries) {
        mContext = context;
        mInflator = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mEntries = entries; 
    }

    @Override
    public int getCount() {
        return mEntries.length;
    }

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if(convertView == null) {
            convertView = mInflator.inflate(R.layout.GVItemLayout, parent, false);
        }
        return convertView;
    }
}

結果:

-------------------------
                |       |
Item1           |Image1 |
                |       |
-------------------------
-------------------------
                |       |
Item2           |Image2 |
                |       |
-------------------------
...

Item1 (Textview) をクリックすると、Item 全体をクリックして GridView の OnItemClickListener をトリガーする必要がありますが、Image1 をクリックすると、itemMethod(String itemName) というメソッドをトリガーし、このメソッドに対応する Item 名を渡す必要があります。そのため、Image1 がクリックされた場合、"Item1" を文字列として method() に渡す必要があります。

どんな助けでも大歓迎です。ありがとうございました

4

2 に答える 2

2

で静的クラスViewHolderを作成しますGVAdapter.java

public static class ViewHolder {
    public TextView myTextView;
    public ImageView myImageView;
    public FrameLayout myFrameLayout;
    public RelativeLayout myRelativeLayout;
 // whatever view
}

あなたの中にgetView(int, View, ViewGroup)

ViewHolder holder = null;

    if (convertView == null) {

        convertView = mInflater.inflate(R.layout.layout_for_each_grid_item, 
                                          parent, false);

        holder = new ViewHolder();
        holder.myTextView = (TextView) convertView
                .findViewById(R.id.myTextView);         
        holder.myImageView = (ImageView) convertView
                .findViewById(R.id.myImageView);            
        holder.myFrameLayout = (FrameLayout) convertView
                .findViewById(R.id.myFrameLayout);
        holder.myRelativeLayout = (RelativeLayout) convertView
                .findViewById(R.id.myRelativeLayout);           

        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

final MyObject info = (MyObject) getItem(position);


// As per your requirement, we can set a `OnClickListener` to the ImageView here

holder.myImageView.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        // Call the method you need to call on ImageView click event
        // Use reference to `info` if you want
    }
});

return convertView;
// Done
于 2013-07-20T18:19:59.817 に答える
0

getview メソッドに on click リスナーを追加するだけです:-

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView image;
        if(convertView == null) {
            convertView = mInflator.inflate(R.layout.GVItemLayout, parent, false);
        }
       image= (ImageView) convertView.findViewById(R.id.image); 
       image.setOnClickListener(new OnClickListener() {
              public void onClick(View v) {
            // Call the method you need to call on ImageView click event
          }
       });
        return convertView;
    }
于 2013-07-20T18:23:42.687 に答える