Линейный макет не виден OnClickListener
У меня есть два макета. Я хочу оставить один макет пропущенным при загрузке действия, и он должен быть виден при щелчке другого макета. поэтому я добавил этот код OnClickListener макета.
additionalContactFrom.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(linearLayoutFrom.getVisibility() == View.GONE){
linearLayoutFrom.setVisibility(View.VISIBLE);
}else{
linearLayoutFrom.setVisibility(View.GONE);
}
}
});
И установили видимость макета в XML-файле.
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/LinearLayoutAdditionalContactFrom">
<ImageView
android:layout_width="25dp"
android:layout_height="25dp"
android:id="@+id/imageView13"
android:layout_marginLeft="20dp"
android:background="@drawable/ic_person_black_48dp"
android:layout_marginTop="05dp"
/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editText"
android:layout_marginRight="10dp"
android:drawableRight="@drawable/ic_expand_more_black_24dp"
android:text="Additional contact (optional)"
android:cursorVisible="false"
/>
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="60dp"
android:layout_marginRight="50dp"
android:layout_gravity="center"
android:visibility="gone"
android:id="@+id/LinearLayoutFrom">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editText2"
android:layout_weight="1"
android:hint="Name"
android:layout_gravity="center"
/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editText3"
android:layout_weight="1"
android:hint="Phone"
android:layout_gravity="center"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="OR"
android:id="@+id/textView19"
android:layout_gravity="center" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:id="@+id/textView13"
android:layout_marginLeft="48dp"
android:hint="Input if you're not receiver" />
</LinearLayout>
Невозможно понять, что происходит не так.. Слушателю не звонят вообще.. Пожалуйста, помогите..
5 ответов
Ваша проблема в том, что ваш EditText захватывает событие click, когда вы нажимаете на него. Если вы щелкнете где-нибудь еще в LinearLayout, он должен работать. Вы можете заменить EditText на TextView, если вам не нужно, чтобы пользователь редактировал содержимое.
+ Изменить
linearLayoutFrom.setVisibility(View.VISIBLE);
к
findViewById(R.id.YOURLAYOUTID).setVisibility(View.VISIBLE);
Я думаю, что вы не можете получить доступ к локальным переменным в под-методах
Пожалуйста, попробуйте установить onClickListener для EditText и ImageView, а не для LinearLayout
Проблема в том, что обработчик EditText является наиболее важным, чем обработчик LinearLayout.
Почти вы можете попытаться сделать точку останова на OnClick и посмотреть, что происходит
Кажется, что видимость макета уже установлена на GONE, поэтому слушатель Onlick не работает со скрытым представлением и не должен работать.
INVISBLE
означает, что вы пытаетесь добавить слушателя к представлению, которого там нет. Вы можете добавить слушателя только в видимый вид.
Временное решение
1) Попробуйте создать фиктивный вид, который будет видимым, но будет иметь тот же цвет, что и фон.
2) Попытайтесь установить слушателя для родителя и проверьте позицию (принадлежит ли позиция представлению INVISIBLE).
Это пример, чтобы объяснить вам, как это сделать: в классе MainActivity:
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.Toast;
public class MainActivity extends Activity {
private LinearLayout linearLayoutFrom;
private LinearLayout additionalContactFrom;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
additionalContactFrom = (LinearLayout) findViewById(R.id.LinearLayoutAdditionalContactFrom);
linearLayoutFrom = (LinearLayout) findViewById(R.id.LinearLayoutFrom);
linearLayoutFrom.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(),
"linearLayoutFrom clicked!!!", Toast.LENGTH_SHORT)
.show();
if (additionalContactFrom.getVisibility() == View.GONE) {
additionalContactFrom.setVisibility(View.VISIBLE);
} else {
additionalContactFrom.setVisibility(View.GONE);
}
}
});
additionalContactFrom.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(),
"additionalContactFrom clicked!!!", Toast.LENGTH_SHORT)
.show();
if (linearLayoutFrom.getVisibility() == View.GONE) {
linearLayoutFrom.setVisibility(View.VISIBLE);
} else {
linearLayoutFrom.setVisibility(View.GONE);
}
}
});
}
}
в файле XML:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/LinearLayoutAdditionalContactFrom"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/holo_blue_dark"
android:orientation="horizontal" >
</LinearLayout>
<LinearLayout
android:id="@+id/LinearLayoutFrom"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_marginLeft="60dp"
android:layout_marginRight="50dp"
android:background="@android:color/holo_green_light"
android:orientation="vertical"
android:visibility="gone" >
</LinearLayout>
<TextView
android:id="@+id/textView13"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="48dp"
android:hint="Input if you're not receiver"
android:textAppearance="?android:attr/textAppearanceSmall" />
</FrameLayout>
Это очень важно, чтобы, когда вы хотите добавить какое-либо представление (например, добавить линейное расположение в другое линейное расположение). Вы должны использовать framelayout или lativelayout(не используйте linearlayout) для этого.