2016-12-13 8 views
0

У меня есть линейная компоновка с более чем 1 дочерним элементом, есть ли способ установить onItemClickListener для моей линейной компоновки?Есть ли способ setOnItemclickListener для линейного макета с более чем одним дочерним элементом

Вот XML-файл

<LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal"> 

      <ImageView 
       android:layout_width="80dp" 
       android:layout_height="80dp" 
       android:padding="1dp" 
       android:src="@drawable/fish" 
       android:layout_marginLeft="7dp" 
       /> 
      <ImageView 
       android:layout_width="80dp" 
       android:layout_height="80dp" 
       android:padding="1dp" 
       android:src="@drawable/fruits" 
       android:layout_marginLeft="8dp"/> 
      <ImageView 
       android:layout_width="80dp" 
       android:layout_height="80dp" 
       android:padding="1dp" 
       android:src="@drawable/vegetables" 
       android:layout_marginLeft="8dp"/> 
      <ImageView 
       android:layout_width="80dp" 
       android:layout_height="80dp" 
       android:padding="1dp" 
       android:src="@drawable/oils" 
       android:layout_marginLeft="8dp"/> 
     </LinearLayout> 
+0

Что вы только что сказали? Вы должны обязательно ссылаться на 'findViewById()' снова. – Wizard

+0

почему ............? это как правильный вопрос для неправильного требования! –

+0

@Wizard bro Я не хочу устанавливать onClickListener для моей линейной компоновки, вы не получили мой вопрос .. –

ответ

1

Один из способов сделать это

for(int i= 0 ; i < linearLayout.getChildCount() ; i++){ 
    View view = linearLayout.getChildAt(i); 
    view.setTag(i); 
    view.setOnClickListener(new OnClickListener(){ 

     @Override 
     public void onClick(View v){ 
      int position = (int) v.getTag(); 
     } 
    }); 
} 

Другой способ заключается в расширяет LinearLayout и создать с этой функциональностью

+0

Спасибо, но как получить товар в позиции ?? Мне нравится gridView gridView.setOnItemClickListener (новый AdapterView.OnItemClickListener() {@Override public void onItemClick (AdapterView parent, View view, int position, long id) {Toast.makeText (getContext(), "Cilicked" + categoriesImageAdapter.getItem (позиция), Toast.LENGTH_SHOR T) .show();}}); –

+0

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

0

Просто установите

android:clickable="true" 

для LinearLayout. Кроме того, не забудьте предоставить onClickListener представление, когда вы его раздуваете.

+0

ответьте, когда у вас достаточно репутации. –

0

Добавить идентификатор в свой LinearLayout, в деятельности получить ссылку на этот линейный макет и установить onClickListener на этот объект

+0

Я хочу установить onClickListener для дочернего элемента Linear Layout, как gridView gridView.setOnItemClickListener (новый AdapterView.OnItemClickListener() {@Override public void onItemClick (AdapterView parent, View view, int position, long id) {Toast.makeText (getContext(), «Cilicked» + categoriesImageAdapter.getItem (позиция), Toast.LENGTH_SHOR T) .show();}}); –

+0

Извините, я не видел onItemClickListener. Вы должны использовать recyclerView или что-то подобное для этого случая. Не начинайте изобретать колесо – bogdanN

0

первого набора идентификатор LinearLayout в вашем XML. , а затем установите OnClickeListener на этом LinearLayout из вашего кода.

Попробуйте это.

<LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:id="@+id/linearLayout"> 

     ... 

    </LinearLayout> 

LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linearLayout); 

linearLayout.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        // Do what you want. 
       } 
      }); 
+0

Я хочу установить onClickListener для дочернего элемента Linear Layout, как gridView gridView.setOnItemClickListener (новый AdapterView.OnItemClickListener() { @Override общественные недействительный onItemClick (AdapterView родителя, Вид вид, внутр позиция, длинный идентификатор) { Toast.makeText (getContext(), "Cilicked" + categoriesImageAdapter.getItem (позиция), Toast.LENGTH_SHORT) .показать(); } }); –

0

Вы, кажется, не понимают разницы между AdapterView виджетов и основной ViewGroups .. Там нет никакого способа, чтобы установить один слушателя с позиции аргумента вне коробки на LinearLayout ..

Однако вы можете подклассифицировать его, выставить интерфейс и перебрать дочерние элементы. На каждом из них устанавливается OnClickListener, который просто вызывает реализацию вашего открытого интерфейса вместе с индексом этого элемента в итерации.

public class MyLinearLayout { 

    private OnItemClickListener mListener; 

    public interface OnItemClickListener { 
     void onClick(int position); 
    } 

    public void setOnItemClickListener(OnItemClickListener listener){ 
     mListener = listener; 
     for (int i = 0; i < getChildCount(); i++) { 
      getChildAt(i).setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        listener.onClick(i); 
       } 
      }); 
     } 
    } 
} 

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

  • Нет связанных вопросов^_^