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> 

私は私のファイルを含めるの内側にすべてのそれらのTextViewに共通のonCLickListenerがしたい

<?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> 

などを含むレイアウトファイルです。以下は

は私onClick方法でクリックリスナーのコールバックを取得していますが、どのように私はそのクリックを担当するなどが差別だろう私の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; 
     } 
    } 
} 

です。私はクリックするたびに同じIDを取得しています。

私はこれらのテキストビューすべてに対して別々のクリックリスナーを持つことができました。しかし、ワンクリックリスナーで達成する方法があります。

答えて

1

:これは私が試してみましたが、私は特定のTextViewにクリックリスナーに私を設定しているとして、それが機能していません

@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

それぞれのすべてのインクルード。 –

+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; 
    } 
} 
} 

・ホープこのヘルプあなたはこのようにバインディングのIDを使用して確認することができます

+0

をチェックすることができます。これは許可しません。あなたのインクルードIDにonclicklistenerを設定することはできません。コンパイル時にエラーが発生します。 –

+0

@DrupDesai、コードが更新されました。お試しください。 –

+0

@DrupDesaiでは、親として 'ViewGroup'または' View'があるかもしれません。 –

関連する問題