android - 使用TextView的onClick跳转到下一页

标签 android android-layout android-intent android-emulator

为了获得更好的 UI,我想到了使用 TextView 代替 Button。单击 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" />

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

最佳答案

默认情况下,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" />

按钮和许多其他 View 需要用户交互,因此它们已经是可点击的,但不是 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);
}

您需要修改每个 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" />

关于android - 使用TextView的onClick跳转到下一页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12096064/

相关文章:

安卓| StartActivityForResult 不会做任何事情

java - 无法从命令行创建 AVD;消息显示未找到 java.se.ee

java - 无法解析符号 'default_web_client_id' 错误,但应用程序运行成功

java - 自定义线性布局

android - 如何将 "disableAlpha"与 EditText 一起使用/如何更改 AttributeSet 中的属性

java - 在真实设备上测试时,GCM 演示应用程序无法注册到 tomcat 服务器

android - 即使应用程序关闭,也可以从后台服务更新 Activity 中的 textview

服务中的 Android 位置更新

android - Appcelerator : Use GCM to get a notification, 有通知打开应用程序

Android - 启动时崩溃