2013-07-09 2 views
0

ArrayAdapter에 대한 사용자 정의보기 (xml)를 ListView에 정의했으며 Button을 추가했습니다. 행 당이 Button에 대해 OnClickListener을 만들고 싶지만 맞춤 어댑터를 만들지는 않습니다. 가능한가요? 아니면 Android가 내 ListView에 대한 맞춤 ArrayAdapter을 만들도록 강요합니까?ArrayAdapter의 버튼이있는 사용자 정의보기

는 여기에 내가 뭘하는지의 조각입니다 :

glAdapter = new ArrayAdapter<Group>(getActivity(), R.layout.fragment_grouprow, R.id.groupRowText, ListOfGroups); 
ListView groupListView = (ListView)mainView.findViewById(R.id.listViewGroupMain); 
groupListView.setAdapter(glAdapter); 
groupListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      // Call function 
     } 
}); 

지금 내 사용자 지정보기에 Button에 대한 OnClickListener을 추가하고 싶습니다.

+0

어댑터의 코드를 게시하십시오. 구현에 따라 다릅니다. 어댑터 또는 개체 클래스에서 직접 clicklistener를 처리 할 수 ​​있습니다. – marshallino16

+0

답장을 보내 주셔서 감사합니다. 방금 코드 조각을 추가했습니다. – LaVomit

+0

@LaVomit'getview'를 오버라이드해야합니다. 그것의 더 나은 사용자 정의 어댑터를 가지고 – Raghunandan

답변

1

직접 어댑터를 구현하고 getView() 방법 설정 OnClickListener 버튼에 있습니다. 여기에서 시작하십시오 :

public class CustomAdapter extends ArrayAdapter<Integer> { 
    private ListView listView; 

    public CustomAdapter(Context context, int textViewResourceId, Integer[] objects, ListView listView) { 
     super(context, textViewResourceId, objects); 
     this.listView = listView; 
    } 


    static class ViewHolder { 
     TextView text; 
     Button btn; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     Integer color = getItem(position); 

     View rowView = convertView; 

     if (rowView == null) { 
      LayoutInflater inflater = ((Activity) getContext()).getLayoutInflater(); 
      rowView = inflater.inflate(R.layout.list_view_row, parent, false); 
      ViewHolder h = new ViewHolder(); 
      h.text = (TextView) rowView.findViewById(R.id.item_text); 
      h.btn = rowView.findViewById(R.id.btn); 
      rowView.setTag(h); 
     } 

     ViewHolder h = (ViewHolder) rowView.getTag(); 

     h.text.setText(color); 
     h.indicator.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // DO what you want to recieve on btn click there. 
      } 
     }); 

     return rowView; 
    } 
} 

ViewHolder 최적화. 이 내용은 there에 대해 읽을 수 있습니다.

+0

내가 전에 삭제, 사용자 정의'ArrayAdapter' 쓰기에 떨어져, hehehe. 감사!! – LaVomit

+0

당신은 오신 것을 환영합니다. – Divers

관련 문제