0

我有一个小问题,在我的 xml 我有这个:

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

        <TextView
            android:id="@+id/title"
            android:layout_width="match_parent"
            android:layout_height="45dp"
            android:gravity="center"
            android:text="@string/app_name"
            android:textColor="@android:color/white"
            android:textStyle="bold"
            android:textSize="18sp"
            android:layout_margin="10dp" />

        <LinearLayout
            android:id="@+id/fistItem"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="15dp"
            android:layout_marginTop="15dp"
            android:orientation="vertical" >

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal"
                android:text="@string/app_name"
                android:textColor="#fff"
                android:textSize="20sp" />
        </LinearLayout>
        <LinearLayout
            android:id="@+id/secondItem"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="15dp"
            android:layout_marginTop="15dp"
            android:orientation="vertical" >

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal"
                android:text="@string/app_name"
                android:textColor="#fff"
                android:textSize="20sp" />
        </LinearLayout>
</LinearLayout>

我的活动文件中有这个:

public class MyActivity extends Activity implements OnTouchListener,
        OnClickListener {

    LinearLayout mainView;
    LinearLayout firstItem;
    TextView header;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_activity);

        mainView = (LinearLayout) findViewById(R.id.mainView);
        firstItem = (LinearLayout) findViewById(R.id.fistItem);
        header = (TextView) findViewById(R.id.title);
        mainView.setOnTouchListener(this);
        firstItem.setOnClickListener(this);

    }

    int n = 0;

    @Override
    public void onClick(View v) {
        header.setText("First Item Clicked: " + ++n + " times");
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            Toast.makeText(getApplicationContext(), "View Touched",
                    Toast.LENGTH_SHORT).show();
        }
        return false;
    }
}

当我单击 firstItem 时,问题就来了。我可以看到标题文本是如何变化的,但是 Toast 没有弹出,但是当我单击 secondItem 时它会弹出。

4

2 回答 2

1

为了通过mainView为firstItem引发onClick事件,您需要在您的方法中返回。例如:onTouchtrueonTouch

@Override
public boolean onTouch(View v, MotionEvent event) {
    ...

    return true;  //now it will raise any registered onClick event too
}

当您返回falseonTouch,它会消耗触摸事件并且不会将其传递给后续onClick事件。

于 2013-08-15T23:57:18.213 回答
0

你错过了这个

        firstItem.setOnTouchListener(this);

在你的 onCreate()

于 2013-08-16T04:09:32.033 回答