我解释了我的问题。
我有一个视图,其中有两个按钮和两个editText。 如果我触摸button1,我想显示edidText1。 如果我触摸button2,我想显示edidText2。
在我的布局中,edidText1的可见性可见,edidText2的可见性消失了。
My_Layout.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_gravity="center"
android:layout_height="match_parent">
<Button
android:id="@+id/btn_comments1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/form_comments"/>
<Button
android:id="@+id/btn_comments2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
<EditText
android:id="@+id/et_comments1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:visibility="visible"
android:gravity="top" />
<EditText
android:id="@+id/et_comments2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:visibility="gone"
android:gravity="top" />
</LinearLayout>
在我的onCreate函数
中final EditText etComments1 = (EditText) alertDialogView.findViewById(R.id.et_comments);
etComments1.setText(comment1);
etComments1.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
Toast.makeText(context, "TODO_1", Toast.LENGTH_LONG).show();
}
});
final EditText etComments2 = (EditText) alertDialogView.findViewById(R.id.et_mes_corr);
etComments2.setText(comment2);
etComments2.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
Toast.makeText(context, "TODO_2", Toast.LENGTH_LONG).show();
}
});
final Button btnComments1 = (Button) alertDialogView.findViewById(R.id.btn_comments1);
final Button btnComments2 = (Button) alertDialogView.findViewById(R.id.btn_comments2);
btnComments2.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
etComments1.setVisibility(View.INVISIBLE);
etComments2.setVisibility(View.VISIBLE);
}
});
btnComments1.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
etComments1.setVisibility(View.VISIBLE);
etComments2.setVisibility(View.INVISIBLE);
}
});
首次点击我的etComments1时,会调用TODO_1。 点击我的btnComments2以显示etComments2后,当我点击它时,不会调用TODO_2。 点击我的btnComments1以显示etComments1后,当我点击它时,不会调用TODO_1。
所以我认为可以来看看。走了。所以我在onClick on按钮上也实现了这个事件,但问题仍然是一样的。
有人可以帮助我吗?
答案 0 :(得分:1)
添加android:focusable="false"
和android:clickable="true"
后,我认为问题是EditText
正在关注第一次点击,然后第二次点击会调用收听者。
尝试添加
android:focusableInTouchMode="false"
到你的EditText
,这应该允许一次点击来呼叫听众。
答案 1 :(得分:0)
修改强>
问题出在布局文件中,有些在代码中。你已经使用了可见性:已经去了edittext2,如果你阅读了doc,那么你就会理解&#34;去了&#34;意味着&#34;完全隐藏,就像没有添加视图一样。&#34;
所以你不应该使用&#34;去掉#34;如果要保留视图属性。为什么你宣布你的变量是最终的?没有必要。我希望它有所帮助:)
布局:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<EditText
android:id="@+id/et_comments1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:visibility="visible"
android:gravity="top" />
<EditText
android:id="@+id/et_comments2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:visibility="invisible"
android:gravity="top" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_gravity="center"
android:layout_height="match_parent">
<Button
android:id="@+id/btn_comments1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="button 1"/>
<Button
android:text="button 2"
android:id="@+id/btn_comments2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
MainActivity:
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
/**
* Created by sonnet on 2/17/15.
*/
public class MainActivity extends Activity {
Button button1;
Button button2;
EditText editText1;
EditText editText2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1 = (Button) findViewById(R.id.btn_comments1);
button2 = (Button) findViewById(R.id.btn_comments2);
editText1 = (EditText) findViewById(R.id.et_comments1);
editText2 = (EditText) findViewById(R.id.et_comments2);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
editText1.setVisibility(View.VISIBLE);
editText2.setVisibility(View.INVISIBLE);
int height = 0;
int width = 0;
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(width, height);
editText2.setLayoutParams(params);
height = FrameLayout.LayoutParams.WRAP_CONTENT;
width = FrameLayout.LayoutParams.MATCH_PARENT;
params = new LinearLayout.LayoutParams(width, height);
editText1.setLayoutParams(params);
}
});
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
editText1.setVisibility(View.INVISIBLE);
editText2.setVisibility(View.VISIBLE);
int height = 0;
int width = 0;
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(width, height);
editText1.setLayoutParams(params);
height = FrameLayout.LayoutParams.WRAP_CONTENT;
width = FrameLayout.LayoutParams.MATCH_PARENT;
params = new LinearLayout.LayoutParams(width, height);
editText2.setLayoutParams(params);
}
});
editText1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(), "edittext1 is clicked", Toast.LENGTH_SHORT).show();
}
});
editText2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(), "edittext2 is clicked", Toast.LENGTH_SHORT).show();
}
});
}
}