簡體   English   中英

封裝TextView隱藏/顯示方法

[英]Encapsulate TextView Hide/Show Method

這是Android onCreate()代碼的onCreate()

View view1;
View view2;
boolean hidden = true;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.volunteer_screen);

    view1 = findViewById(R.id.sub1);
    view2 = findViewById(R.id.answer1);

    view1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (hidden)
            {
                view2.setVisibility(View.GONE);
                hidden = false;
            } else
            {
                view2.setVisibility(View.VISIBLE);
                hidden = true;
            }
        }
    });

如何將其封裝在某些類中,也許使用類似以下的構造函數:

Class(View view1, View view2, boolean state)

不對每個新的TextViews對調用setOnClickListener()方法嗎?

提前非常感謝!

您將擁有一個視圖(如按鈕)來隱藏或顯示另一個視圖,對嗎?

如果是這樣,在布局上添加android:onclick="myFunction"並在您的類上創建一個方法

public void myFunction(View v){
// do your logic
}

您可以使用v.getId() == R.id.youViewId來檢查哪個視圖調用了該函數,這樣就可以構建一個開關或邏輯,並更改正確的視圖。

您可以在同一類中定義這樣的方法:

private void setClickListener(final EditText sub, final EditText answer) {
    sub.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            answer.setVisibility(hidden ? View.GONE : View.VISIBLE);
            hidden = !hidden;
        }
    });
}

然后你可以打電話

setClickListener(view1, view2);
setClickListener(view3, view4);
...

我認為僅為該方法創建類不是有用的,但是顯然可以。

將此視圖包括在活動的XML文件中,如下所示:

<your.package.CustomLayout
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
/>

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.LinearLayout;

/**
 * Created by ozgur on 09.06.2016.
 */
public class CustomLayout extends LinearLayout {

    private View view1;
    private View view2;
    private boolean hidden;

    public CustomLayout(Context context) {
        super(context);
        init(context);
    }

    public CustomLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    public CustomLayout(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context);
    }

    private void init(Context context) {
        //inflate the view that contains your view1, view2
        View wrapper = inflate(context, R.layout.view_custom_layout, this);
        view1 = wrapper.findViewById(R.id.view1);
        view2 = wrapper.findViewById(R.id.view2);

        view1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                if (hidden) {
                    view2.setVisibility(View.GONE);
                    hidden = false;
                } else {
                    view2.setVisibility(View.VISIBLE);
                    hidden = true;
                }
            }
        });
    }
}

暫無
暫無

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

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