2014-02-10 8 views
0

У меня есть ListView в Activity и в этом ListView у меня есть другой макет, который дает список его содержимого. Вот кодКак получить доступ к макету в спискеView в android

SimpleAdapter adapter = new SimpleAdapter(this.getActivity(),listvalue, 
       R.layout.singlepost,v,s);            
list.setAdapter(adapter); 

singlepost является расположение загружаю в ListView, но это singlepost имеет несколько кнопок, которые я хочу, чтобы получить доступ, но я не могу получить доступ к thebuttons, потому что он не загружен с активностью, содержащей ListView так, когда Я пытаюсь получить доступ к этой кнопке так, как это

ImageButton star = (ImageButton)findViewById(R.id.star); 

Это говорит мне, что просмотр, который вы пытаетесь получить, не входит в эту деятельность. Я знаю, что невозможно использовать два setContentView(R.layout.activity_main);, за исключением использования фрагментов. так как я могу получить доступ к кнопке в макете singlepost.

Примечание: Когда я имею в виду Access, я имею в виду щелкнуть и нажать кнопку, чтобы сделать что-то, и я сделал все необходимые объявления и экземпляры, которые мне нужны, это способ доступа к этой кнопке. Благодарю. Надеюсь, мой вопрос достаточно ясен.

ответ

0

Я доволен, что вам нужно будет сделать свой собственный адаптер, который расширяет некоторые адаптеры (SimpleAdapter, ArrayAdapter, ...). А в методе getView() устанавливать какие-либо слушателей: необходимому

public class MySimpleArrayAdapter extends ArrayAdapter<String> { 

    private final Context context; 
    private final String[] values; 
    private LayoutInflater inflater; 

    public MySimpleArrayAdapter(Context context, String[] values) { 
     super(context, R.layout.row_layout, values); 
     this.context = context; 
     this.values = values; 
     this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

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

     if(convertView == null){ 
      convertView = inflater.inflate(R.layout.row_layout, parent, false);  
     } 

     Button button = (Button) convertView.findViewById(R.id.button); 
      button.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 
        // Perform action on click 
       } 
      }); 

     return convertView; 
    } 

} 

EDIT: Или пример с SimpleAdapter. Обратите внимание, что я не пробовал, но теоретически это должно работать.

public class MyAdapter extends SimpleAdapter { 

    private List list; 

    public MyAdapter(Context context, List list, int resource, String[] from, int[] to) { 
     super(context, list, resource, from, to); 
     this.list = list; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     convertView = super.getView(position, convertView, parent); 

     Button button = (Button) convertView .findViewById(R.id.button); 
     button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       // Perform action on click 
      } 
     }); 

     return convertView; 
    } 
} 
+0

так что я беру свою первоначальную декларацию SimpleApadter и заменяю ее новым классом? –

+0

да, но если вы расширите 'ArrayAdapter', как в этом примере, вам также нужно будет установить все' TextView'. –

+0

@ daviestobialex или см. Править для примера с помощью 'SimpleAdapter'. –

Смежные вопросы