2013-07-20 2 views
0

각 항목 안에 TextView와 ImageView가있는 Gridview를 디자인하고 있습니다. GridView Item 자체 (둘 다 다른 메소드()를 트리거 할 수 있음)뿐만 아니라 ImageView clickable을 만드는 방법에 대한 자습서 (단계별로 업데이트되고 명확한 단계)를 찾으려고했습니다.안드로이드 GridView 클릭 가능 ImageView

Activity.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)를 클릭하면 전체 항목을 클릭하고 GridView의 OnItemClickListener를 트리거해야하지만 Image1을 클릭하면 itemMethod (String itemName) 메서드가 트리거되어 해당 항목 이름이 전달되어야하므로 Image1을 클릭하면 "Item1"을 문자열로 메서드()에 전달해야합니다.

도움이 될 것입니다. 감사합니다

답변

2

GVAdapter.java에 정적 클래스 ViewHolder을 만듭니다. 내부

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

getView(int, View, ViewGroup) 당신 : 당신이 당신의 getView 방법에 클릭 리스너에 추가 할 필요가

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 
+0

는'R.layout.explorer_item_light_progress 무엇입니까,' –

+0

@ Extremis는 코드 정리에서 남은 것입니다. 그리고 사라 졌어요. – Vikram

+0

완벽한 작품 : –

0

: -

@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; 
    } 
관련 문제