【问题标题】:Android onClick ActionAndroid onClick 动作
【发布时间】:2014-01-25 08:15:57
【问题描述】:

伙计们,我一直在挠头,试图在 TextView 上实现一个相当简单的 onClick 操作,但没有成功。这是我的代码:

    public class AccountsActivity extends Activity {

    final Context context = this;

     private TextView tvNextOkin;


    /** Called when the activity is first created. */
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
        setContentView(R.layout.my_account);

        tvNextOkin = (TextView) findViewById(R.id.tv_acc_next_of_kin);
         tvNextOkin.setText("Not set. Tap here to add");
         tvNextOkin.setTextColor(Color.RED);

        }



        public void performClick(View view){
         Log.i("Action::", "clicked!!");

      // add  listener
      tvNextOkin.setOnClickListener(new OnClickListener() {

             @Override
             public void onClick(View arg0) {

                  // custom dialog
                final Dialog dialog = new Dialog(context);
                dialog.setContentView(R.layout.custom_dialog);
                  dialog.setTitle("This is a custom dialog");

                     dialog.show();
         }


         });
     }

 }

这里是 xml 布局:

    <?xml version="1.0" encoding="utf-8"?>
    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#ffffff" >

    <LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:padding="2dp" >

     <TextView
      android:id="@+id/tv_acc_next_of_kin"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:layout_marginTop="5dp"
      android:text="tap here to add"
      android:textColor="#000"
      android:textSize="14dp"
      android:onClick="performClick"
      android:typeface="sans" />

      </LinearLayout>

      </ScrollView>

我的目标是能够在单击 textview 时调用 performClick() 方法。有什么建议吗?

【问题讨论】:

    标签: android


    【解决方案1】:

    在xml中为TextView添加android:clickable="true"

    正如@Altaf 在他的回答中提到的那样,删除监听器。 只要有,

    public void performClick(View view){
         Log.i("Action::", "clicked!!");
    
                  // custom dialog
         final Dialog dialog = new Dialog(context);
         dialog.setContentView(R.layout.custom_dialog);
         dialog.setTitle("This is a custom dialog");
    
         dialog.show();
     }
    

    或者替代方法是删除android:onClick="onClick" 并在您的活动中为TextView 实现onClickListener

    【讨论】:

    • 谢谢 droidx。我很感激
    • 欢迎@user2251344。如果您发现 ans 有用,请投票 :-) 哦,谢谢您已经这样做了
    【解决方案2】:

    移除监听器

    tvNextOkin.setOnClickListener(new OnClickListener() {}
    

    你只需要 performClick 方法

    【讨论】:

      【解决方案3】:

      你应该在 onCreate() 中注册你的 onClick 监听器。 可以参考Android SDK文档。

      【讨论】:

        【解决方案4】:

        在你的 xml 中为 textview 添加这个

        android:onClick="onClick"
        android:clickable="true"
        

        并执行onclick操作

        public void onClick(View v) {
                ...
              }  
        

        【讨论】:

        • 不错,阿拉文斯!确实我忘了在我的 xml 中添加 android:clickable="true"。
        【解决方案5】:

        我看到了你的问题。

        当你设置android:onClick="performClick"时,这意味着当用户点击TextView时会调用performClick方法。

        在这个方法中会做:SET onClickListener for tvNextOkin

        它不显示任何对话框。 :D

        解决办法:

        <TextView
              android:id="@+id/tv_acc_next_of_kin"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:layout_marginTop="5dp"
              android:text="tap here to add"
              android:textColor="#000"
              android:textSize="14dp"
              android:typeface="sans" />
        
        tvNextOkin.setOnClickListener(new OnClickListener() {
        
                     @Override
                     public void onClick(View arg0) {
        
                          // custom dialog
                        final Dialog dialog = new Dialog(context);
                        dialog.setContentView(R.layout.custom_dialog);
                          dialog.setTitle("This is a custom dialog");
        
                             dialog.show();
        }
        

        不要放在performClick方法中。

        希望这会对你有所帮助。

        问候,

        【讨论】:

          猜你喜欢
          • 2011-01-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-08
          • 2017-12-07
          • 1970-01-01
          • 1970-01-01
          • 2015-06-13
          相关资源
          最近更新 更多