0

子として 5 つの線形レイアウトを含む線形レイアウトがあります。各子線形レイアウトのタッチ イベントを処理したい。私のレイアウトは次のようになります

   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:id="@+id/container">

             <LinearLayout android:id="@+id/item1"  
            android:layout_width="match_parent"
            style="@style/NavLinkItemContainer"
            android:layout_height="wrap_content">
             <TextView              
                style="@style/NaviLinkSelected"
                android:text="First"/>
            </LinearLayout>

        <LinearLayout android:id="@+id/item2"
            android:layout_width="match_parent"
            style="@style/NavLinkItemContainer"
            android:layout_height="wrap_content">          
        <TextView                  
            style="@style/NaviLinks"
            android:text="Second"/>
        </LinearLayout>

        <LinearLayout android:id="@+id/item3"
            android:layout_width="match_parent"
            style="@style/NavLinkItemContainer"
            android:layout_height="wrap_content">
        <TextView 
            style="@style/NaviLinks"
            android:text="Third"/>
        </LinearLayout>

        <LinearLayout android:id="@+id/item4"
            android:layout_width="match_parent"
            style="@style/NavLinkItemContainer"
            android:layout_height="wrap_content">
        <TextView 
            style="@style/NaviLinks"
            android:text="Fourth"/>
        </LinearLayout>

        <LinearLayout android:id="@+id/item5"
            android:layout_width="match_parent"
            style="@style/NavLinkItemContainer"
            android:layout_height="wrap_content">
        <TextView
            style="@style/NaviLinks"
            android:text="Fifth"/>
        </LinearLayout>

 </LinearLayout>

レイアウトを使用した私のアクティビティは次のようになります

public class MainActivity extends Activity implements OnTouchListener{

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);  
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        Log.d("","ON TOUCH VIEW ######## "+v.getId());
        return false;
    }
}

子レイアウトに触れると、onTouch イベントで id(item1,item2...) が取得されません。アドバイスをお願いします。

4

2 に答える 2

2

タッチ リスナーを追加するレイアウトごとに、onTouchListener を設定します。

例えば、

LinearLayout l1 = (LinearLayout) findViewById(R.id.item2);
l1.setOntouchListener(this);

したがって、ViewGroup ごとにリスナーを設定する必要があります。残りのことはすでにあなたによって行われています。タッチまたはすべての ViewGroup を処理できる Int onTouch メソッド

@Override
public boolean onTouch(View v, MotionEvent event) {
    switch (v.getId()) {
    case R.id.item2:
        do something 
        break;
    case R.id.item3:
        do something 
        break;
    default:
        break;
    }
       // if you want to consume the behavior then return true else retur false
}
于 2013-04-20T08:59:25.263 に答える