使用TextView的onClick转到下一页

Shr*_*eya 1 android android-emulator android-intent android-layout

为了获得更好的UI,我想到使用TextViews代替Buttons.单击TextView时,应显示应用程序的下一页.我在XML文件中定义了onClick函数,但它不起作用.

这是XML文件.

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="16dp"
    android:onClick="serve"
    android:text="@string/Service"
    android:textSize="20dp" />

<TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/textView1"
    android:layout_below="@+id/textView1"
    android:layout_marginTop="87dp"
    android:onClick="complain"
    android:text="@string/Comp"
    android:textSize="20dp" />

<TextView
    android:id="@+id/textView3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/textView2"
    android:layout_below="@+id/textView2"
    android:layout_marginTop="121dp"
    android:onClick="feed"
    android:text="@string/Feedback"
    android:textSize="20dp" />
Run Code Online (Sandbox Code Playgroud)

Java文件:

public class MainActivity extends Activity {

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

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    public void serve(View v)
    {
        Intent i=new Intent();
        i.setClass(this,Second.class);
        startActivity(i);
    }

    public void complain(View v)
    {
        Intent in=new Intent();
        in.setClass(this,Third.class);
        startActivity(in);
    }

    public void feed(View v)
    {
        Intent inn=new Intent();
        inn.setClass(this,Fourth.class);
        startActivity(inn);
    }
}
Run Code Online (Sandbox Code Playgroud)

Sam*_*Sam 9

默认情况下,TextView不可单击,因此永远不能调用onClick操作...只需添加:android:clickable="true"到每个TextView:

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="16dp"
    android:clickable="true"
    android:onClick="serve"
    android:text="@string/Service"
    android:textSize="20dp" />
Run Code Online (Sandbox Code Playgroud)

按钮和许多其他视图期望用户交互,因此它们已经可以点击,但不是TextView.


此外,由于onClick()方法执行相同的基本操作,请考虑使用泛型方法:

public void click(View v) {
    Intent intent;
    switch(v.getId()) {
    case R.id.serve: // R.id.textView1
        intent = new Intent(this, Second.class);
        break;
    case R.id.complain: // R.id.textView2
        intent = new Intent(this, Third.class);
        break;
    case R.id.feed: // R.id.textView3
        intent = new Intent();
    }
    startActivity(intent);
}
Run Code Online (Sandbox Code Playgroud)

您需要在每个TextView中修改idonClick属性,如下所示:

<TextView
    android:id="@+id/serve"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="16dp"
    android:clickable="true"
    android:onClick="click"
    android:text="@string/Service"
    android:textSize="20dp" />
Run Code Online (Sandbox Code Playgroud)