簡體   English   中英

線性布局不可見OnClickListener

[英]Linear layout not getting visible OnClickListener

我有兩種布局。 我想讓一個布局在活動加載時消失,它應該在另一布局的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>

無法理解發生了什么問題。.根本沒有呼叫聽眾。.請幫助。

更改

linearLayoutFrom.setVisibility(View.VISIBLE);

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

我認為您無法在子方法中訪問本地變量

似乎“布局可見性”已設置為“消失”,因此Onlick偵聽器無法在隱藏的View上工作,因此也不應工作。

INVISBLE表示您正在嘗試將偵聽器添加到不存在的視圖中。 您只能將偵聽器添加到可見視圖。

解決方法

1)嘗試制作一個可見的虛擬視圖,但其顏色與背景相同。

2)嘗試為父對象設置偵聽器並檢查位置(該位置是否確實屬於INVISIBLE視圖)。

您的問題是您的EditText在單擊時捕獲了click事件。 如果您在LinearLayout中的其他位置單擊,它將正常工作。 如果不需要用戶編輯內容,則可以用TextView替換EditText。

請嘗試將onClickListener設置為EditText和ImageView,將no設置為LinearLayout

問題在於EditText的處理程序比LinearLayout處理程序最重要。

幾乎您可以嘗試在OnClick上斷點,看看發生了什么

這是一個解釋您如何執行此操作的示例:在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或relativelayout(不要使用linearlayout)來做到這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM