0

У меня есть файл макета, в котором у меня есть несколько файлов с таким же файлом макета, как показано ниже.Как написать обычный onclicklistener для того же множественного включения в привязке данных

<?xml version="1.0" encoding="utf-8"?> 
<layout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 

    <data> 
     <variable 
      name="row1Data" 
      type="com.desaidr.testapp.RowDetails" /> 

     <variable 
      name="row2Data" 
      type="com.desaidr.testapp.RowDetails" /> 

     <variable 
      name="row3Data" 
      type="com.desaidr.testapp.RowDetails" /> 

     <variable 
      name="row4Data" 
      type="com.desaidr.testapp.RowDetails" /> 

     <variable 
      name="row5Data" 
      type="com.desaidr.testapp.RowDetails" /> 
    </data> 

    <LinearLayout 
     android:id="@+id/activity_main" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

     <include 
      android:id="@+id/row_1" 
      layout="@layout/include_row_details" 
      app:rowDetails="@{row1Data}"/> 

     <include 
      android:id="@+id/row_2" 
      layout="@layout/include_row_details" 
      app:rowDetails="@{row2Data}"/> 

     <include 
      android:id="@+id/row_3" 
      layout="@layout/include_row_details" 
      app:rowDetails="@{row3Data}"/> 

     <include 
      android:id="@+id/row_4" 
      layout="@layout/include_row_details" 
      app:rowDetails="@{row4Data}"/> 

     <include 
      android:id="@+id/row_5" 
      layout="@layout/include_row_details" 
      app:rowDetails="@{row5Data}"/> 

    </LinearLayout> 
</layout> 

ниже включаемый файл макета как

<?xml version="1.0" encoding="utf-8"?> 
<layout xmlns:android="http://schemas.android.com/apk/res/android"> 

    <data> 

     <variable 
      name="rowDetails" 
      type="com.desaidr.testapp.RowDetails" /> 
    </data> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

     <TextView 
      android:id="@+id/txt_rot_title" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="@={rowDetails.title}"/> 
    </LinearLayout> 
</layout> 

Я хотел бы иметь общий onCLickListener для всех тех, кто TextView внутри моего включаемого файла.

Ниже мой Activity код

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 

    private ActivityMainBinding mBinding; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mBinding = DataBindingUtil.setContentView(this, R.layout.activity_main); 

     mBinding.row1.txtRowTitle.setOnClickListener(this); 
     mBinding.row2.txtRowTitle.setOnClickListener(this); 
     mBinding.row3.txtRowTitle.setOnClickListener(this); 
     mBinding.row4.txtRowTitle.setOnClickListener(this); 
     mBinding.row5.txtRowTitle.setOnClickListener(this); 
    } 


    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
      case R.id.txt_row_title: 
       //TODO I am getting all my click here but how would differentiate which include is responsible for this click listener 
       break; 
     } 
    } 
} 

Я получаю нажмите слушающие спины вызова в моем onClick метода, но как бы я дифференцироваться, которые включают в себя отвечают за этот клик. Поскольку я получаю одинаковый идентификатор каждый раз для клика.

У меня может быть отдельный прослушиватель кликов для всего текста. Но есть ли способ добиться успеха в одном прослушивателе кликов.

ответ

1

Вы можете проверить с помощью связывания идентификационному так:

@Override 
public void onClick(View view) { 
    if (view == binding.row1.txtRotTitle) { 
     Toast.makeText(MainActivity.this, "text clicked", Toast.LENGTH_SHORT).show(); 
    } else if (view == binding.row2.txtRotTitle) { 
     Toast.makeText(MainActivity.this, "text clicked 2", Toast.LENGTH_SHORT).show(); 
    } 
} 
+0

для всех остальных идентификаторов строк для этого текстового представления будет одинаковым. поэтому он будет идти первым, если только. –

+0

Я не думаю, что так .. это «binding.row1» будет отличаться для всех. – Meenal

+0

thaqt - это то, что я говорю. Если у вас есть код ccode, о котором вы упоминали, вы всегда будете получать cllback в своем первом, если. Попытайтесь изменить тост-сообщение, которое вы узнаете. –

0

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

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
     case R.id.row_1: 
      break; 
     case R.id.row_2: 
      break; 
    } 
    } 
+0

Это я пытался, но он не работает, как я установил мой на клик слушателя к конкретным TextView в каждый включает. –

+0

вы можете щелкнуть по строке, а не щелкнуть по текстуу –

+0

mBinding.row1.setOnClickListener (this); –

1

Вы должны попробовать это.

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 

private ActivityMainBinding mBinding; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    mBinding = DataBindingUtil.setContentView(this, R.layout.activity_main); 

    mBinding.row1.txtRowTitle.setOnClickListener(this); 
    mBinding.row2.txtRowTitle.setOnClickListener(this); 
    mBinding.row3.txtRowTitle.setOnClickListener(this); 
    mBinding.row4.txtRowTitle.setOnClickListener(this); 
    mBinding.row5.txtRowTitle.setOnClickListener(this); 
} 


@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
     case R.id.txt_row_title: 
      //TODO I am getting all my click here but how would differentiate which include is responsible for this click listener 
      switch (((ViewGroup)v.getParent()).getId()) { 
       case R.id.row_1: 
        break; 
       case R.id.row_2: 
        break; 
       case R.id.row_3: 
        break; 
       case R.id.row_4: 
        break; 
       case R.id.row_5: 
        break; 
      } 
      break; 
    } 
} 
} 

Надежда эта помощь

+0

Это не позволит этого сделать .. Вы не можете установить onclicklistener в свои идентификаторы include. Дает ошибку времени компиляции. –

+0

@DrupDesai, код обновлен, не могли бы вы попробовать? –

+0

@DrupDesai, это может быть 'ViewGroup' или' View' как родительский. –

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

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