【问题标题】:Linear layout not getting visible OnClickListener线性布局不可见 OnClickListener
【发布时间】:2015-12-05 12:59:09
【问题描述】:

我有两种布局。我想在加载活动时保持一个布局消失,并且它应该在另一个布局的 onClick 上可见。所以我添加了这个代码 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>

无法理解出了什么问题..监听器根本没有被调用..请帮助..

【问题讨论】:

  • 您希望在单击 ID 为 LinearLayoutAdditionalContactFrom 的 LinearLayout 时让已消失的 LinearLayout 可见?
  • 您可以检查以确保各种findViewById(int id) 函数与其适当的布局相匹配
  • 您可以检查以确保各种findViewById(int id) 函数与其适当的布局相匹配
  • 您提到您的听众根本没有被呼叫?您应该检查您的附加联系人的 ID,并尝试使用 Log.d() 或 System.out.println 进行调试

标签: java android android-linearlayout onclicklistener visible


【解决方案1】:

您的问题是您的 EditText 在您单击它时正在捕获单击事件。如果您单击 LinearLayout 中的其他位置,它应该可以工作。 如果不需要用户编辑内容,可以将 EditText 替换为 TextView。

【讨论】:

  • 谢谢你...工作...@fubarly
【解决方案2】:

改变

linearLayoutFrom.setVisibility(View.VISIBLE);

findViewById(R.id.YOURLAYOUTID).setVisibility(View.VISIBLE);

我认为您无法在子方法中访问本地变量

【讨论】:

  • 感谢您的回复。。尝试了这种方式,点击后仍然无法查看布局。 @阿尔瓦罗
  • 这是错误的,应该删除。您可以访问内部类中的最终变量。
【解决方案3】:

似乎 Layout Visibility 已设置为 GONE,因此 Onlick 侦听器未在隐藏视图上工作,它也不应该工作。

INVISBLE 表示您正在尝试将侦听器添加到不存在的视图中。您只能将侦听器添加到可见视图。

解决方法

1) 尝试制作一个可见但与背景颜色相同的虚拟视图。

2) 尝试为 parent 设置监听器并检查位置(位置是否 属于 INVISIBLE 视图)。

【讨论】:

  • Yes 它设置为 Gone 是因为它在活动的创建时不可见。 @Aman Tonk
【解决方案4】:

请尝试将 onClickListener 设置为 EditText 和 ImageView 而不是 LinearLayout

问题在于EditText的Handler比LinearLayout的handler最重要。

几乎你可以尝试在 OnClick 上设置一个断点,看看发生了什么

【讨论】:

    【解决方案5】:

    这是一个向您解释如何执行此操作的示例: 在 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&apos;re not receiver"
            android:textAppearance="?android:attr/textAppearanceSmall" />
    
    </FrameLayout>
    

    这是非常重要,当您想要添加一些视图时(例如 将一个线性布局添加到另一个线性布局)。你应该使用 framelayout 或 相对布局(不要使用线性布局)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多