单击时,Android onclicklistener第一次不起作用

时间:2014-05-15 13:44:28

标签: android

我有一个带有默认文字的EditText。

现在,当用户点击该EditText时,默认文本应更改为某些内容。

我得到的是:

  • 在默认文本没有发生之后点击EditText光标
  • 当我再次点击时,onClickListener正常工作

如何解决这个问题,它是从第一次开始的?

这是我的xml:

                 <EditText
                    android:id="@+id/step"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_vertical"
                    android:layout_marginTop="5dp"
                    android:hint="@string/hnt_message"
                    android:text="Default text"
                    android:maxLength="@integer/max_free_msg_length"
                    android:maxLines="2"
                    />

这是我的片段代码:

 private EditText editMessage;

    @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    mContentView = inflater.inflate(R.layout.fragment_step, container, false);
    ButterKnife.inject(this, mContentView);


    editMessage = (EditText) mContentView.findViewById(step);
    editMessage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            clearEditMessageText();
        }
    });
}

我知道我可以使用奶油刀来制作这个按钮,但是我做了,但那并没有奏效。

3 个答案:

答案 0 :(得分:14)

将EditText的焦点设置为false。首先点击获得焦点到EditText。

<EditText
                    android:id="@+id/step"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_vertical"
                    android:layout_marginTop="5dp"
                    android:hint="@string/hnt_message"
                    android:text="Default text"
                    android:maxLength="@integer/max_free_msg_length"
                    android:maxLines="2"
android:focusable="false"
                    />

更新: 好吧,在你的情况下,你可以使用onFocusChangeListnere而不是onClickListener。

edittext.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View view, boolean b) {
                if (b) {
                    //do something
                }
            }
        });

答案 1 :(得分:0)

在布局onClick的xml文件中,选择代码中的相应函数。

    <Button
        android:layout_width="460dp"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:onClick="onClick_Action_Function" />

在您的实际代码中执行此操作

public void onClick_Action_Function(View view) {

        //do stuff
    }

不要这样做(这将使第一个onClick函数尝试调用第二个onClick函数)

public void onClick_Action_Function(View view) {

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });
}

答案 2 :(得分:0)

我在使用 editText 时遇到了这个问题,我希望玩家在其中输入角色名称。我不喜欢使用提示,因为提示也放在弹出的键盘窗口中,我希望它最初是空白的。所以我最初在editText中添加了名称请求。我想在第一次点击时将其擦除。第一次点击触发了弹出式键盘,但不会触发“setOnClickListener”来擦除该字段。我通过在“setOnFocusChangeListener”上调用 performClick 操作解决了这个问题。

这对我来说似乎仍然有点麻烦,但是按照建议将 focusable 或 focusableInTouchMode 更改为 false 会阻止弹出式键盘显示。

charnameEditText.setText("Enter Name Here");
....
charnameEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        public void onFocusChange(View view, boolean hasFocus) {
            if (hasFocus) {
                view.performClick();
            }
        }
});

//Normally not called by first click
charnameEditText.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           charnameEditText.setText("");
        }
});