3

看看下面的代码......我在 textview 和 ontouch 监听器上设置 onclick 监听器,但它们都没有工作......

似乎是什么问题>....?

    AlertDialog.Builder builder;
    AlertDialog a;
    TextView text,txtNewUser ;
    ImageView image;
    View layout;
    Button ok;
    String pswrd;
    LayoutInflater inflater;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        final Context mContext = this;
        Dialog dialog = new Dialog(mContext);
        inflater = (LayoutInflater) mContext
                .getSystemService(LAYOUT_INFLATER_SERVICE);
        ok = (Button) findViewById(R.id.buttonOK);

        dialog.setContentView(R.layout.custom_dialog_private_space);
        dialog.setTitle("Password");
        dialog.setCancelable(true);
        layout = inflater.inflate(R.layout.custom_dialog_private_space,
                (ViewGroup) findViewById(R.id.layout));
        text = (TextView) dialog.findViewById(R.id.tvDesc);
        txtNewUser = (TextView) dialog.findViewById(R.id.tvNewUser);

        image = (ImageView) layout.findViewById(R.id.image);
        image.setImageResource(R.drawable.lock_symbol_android);

        builder = new AlertDialog.Builder(mContext);
        builder.setView(layout);

        a = builder.create();
        a.show();

        txtNewUser.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub
                if(event.getAction() == MotionEvent.ACTION_UP)
                Toast.makeText(mContext, "Clicked", Toast.LENGTH_SHORT).show();
                Log.v("AS", "Clicked");
    return true;

            }
        });

txtNewUser.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        Toast.makeText(mContext, "Clicked", Toast.LENGTH_SHORT).show();
        Log.v("AS", "Clicked");
    }
});
    }

这是对话框布局的xml中textview的代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:id="@+id/layout" >

<TextView android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/tvNewUser"
    android:text="New User?"
    android:layout_gravity="top|left"
    android:clickable="true"

    />

    <ImageView
        android:id="@+id/image"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
       />

    <TextView
        android:id="@+id/tvDesc"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:text="Enter password"
        android:textAppearance="?android:attr/textAppearanceLarge" 
        />



    <EditText
        android:id="@+id/etPassword"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="100"
        android:inputType="textPassword" >


    </EditText>

    <Button
        android:id="@+id/buttonOK"
        android:layout_width="100dp"
        android:layout_gravity="center"
        android:layout_height="fill_parent"
        android:text="OK" />

</LinearLayout>
4

4 回答 4

3
  1. 而不是 infalter 使用窗口类
  2. 在 Touch 监听器中返回 false
  3. 将内容视图设置为您的主要活动

    package com.collabera.labs.sai;
    
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.app.Dialog;
    import android.content.Context;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.Window;
    import android.view.View.OnTouchListener;
    import android.widget.Button;
    import android.widget.ImageView;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class HomePage extends Activity {
        AlertDialog.Builder builder;
        AlertDialog a;
        TextView text, txtNewUser;
        ImageView image;
        Button ok;
        String pswrd;
    
        public Window mWindow;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.custom_dialog_private_space);
            ok = (Button) findViewById(R.id.buttonOK);
            final Context mContext = this;
            Dialog dialog = new Dialog(HomePage.this);
    
            dialog.setContentView(R.layout.custom_dialog_private_space);
            dialog.setTitle("Password");
            dialog.setCancelable(true);
            dialog.show();
            mWindow = dialog.getWindow();
            Log.w(" dialog is " + mWindow.toString(), "-------");
            text = (TextView) mWindow.findViewById(R.id.tvDesc);
            txtNewUser = (TextView) mWindow.findViewById(R.id.tvNewUser);
            image = (ImageView) mWindow.findViewById(R.id.image);
            image.setImageResource(R.drawable.icon);
    
            txtNewUser.setOnTouchListener(new OnTouchListener() {
    
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    if (event.getAction() == MotionEvent.ACTION_UP)
                        Toast.makeText(mContext, "Touched", Toast.LENGTH_SHORT)
                                .show();
                    Log.v("AS", "Touched");
                    return false;
    
                }
            });
    
            txtNewUser.setOnClickListener(new View.OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    Toast.makeText(mContext, "Clicked", Toast.LENGTH_SHORT).show();
                    Log.v("AS", "Clicked");
                }
            });
        }
    }
    
于 2012-04-16T11:40:23.617 回答
1

我想..你也应该回来

return super.onTouchEvent(event);

来自 onTouch 函数 ..而不是 true因为 true 意味着事件被触摸消耗,并且不会为此事件调用其他操作.. 在这种情况下onClick

于 2012-04-16T10:32:42.983 回答
0

在 toast 两种情况下,您都编写了 clicked,因此更改为在 onTouch 侦听器中触摸并在 onTouch 侦听器中返回 false:

public class HomePage extends Activity {
    private TextView txtNewUser;
    private Context mContext;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mContext = getApplicationContext();
        txtNewUser = (TextView) findViewById(R.id.tvNewUser);

        txtNewUser.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub
                if (event.getAction() == MotionEvent.ACTION_UP)
                    Toast.makeText(mContext, "Touched ", Toast.LENGTH_SHORT)
                            .show();
                Log.v("AS", "Touched");
                return false;

            }
        });

        txtNewUser.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Toast.makeText(mContext, "Clicked", Toast.LENGTH_SHORT).show();
                Log.v("AS", "Clicked");
            }
        });

    }
于 2012-04-16T10:39:56.907 回答
0

这是我用来使 imageview 可点击的方式:

public class Main extends Activity **implements OnClickListener** {

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


   ImageView  profile_btn=(ImageView) findViewById(R.id.x_Btn);
   x_btn.setOnClickListener(this) ;


    ImageView  food_btn=(ImageView) findViewById(R.id.y_Btn);

    ybtn.setOnClickListener(this); 
   }

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
      switch(v.getId())
    {
    case R.id.x_Btn:
            //do some thing;break;
                  case R.id.y_Btn:
    //do some thing;break;
                  }
     }
}
于 2012-04-16T10:56:38.210 回答