2016-06-09 84 views
0

以下是Android onCreate()代碼的片段。封裝TextView隱藏/顯示方法

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) 

不叫setOnClickListener()方法於每一位新對TextViews

非常感謝提前!

+0

你可以有這樣的'機器人:的onClick = 「myMethod的」'在你的每一個文本視圖的XML,是否以任何方式幫助你?我的意思是你可以爲每一對設置一次,並讓它調用一個參數,如你給出的構造函數。類似的東西。 – Vucko

回答

0

您將有一個視圖(如按鈕)隱藏或顯示另一個視圖的權利?

,如果是這種情況,在佈局添加android:onclick="myFunction"並在您的類中創建一個方法

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

你可以查閱一下查看使用v.getId() == R.id.youViewId,這樣調用函數,你可以建立一個開關或者邏輯並更改正確的視圖。

+0

是的,這確實實現了我想要的邏輯!非常感謝。 –

0

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

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); 
... 

我沒有看到創建一個類只是這個方法有用,但顯然你可以。

+0

非常感謝您的幫助!它工作的很好,但是關於標誌的點是。就像每個視圖都有自己的標誌一樣,這種更改調用setClickListener。所以我把你的建議與關於switch statemnt和一切工作的建議混合在一起。 再次感謝您。 –

0

包括在你活動的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; 
       } 
      } 
     }); 
    } 
} 
+0

不客氣。 – Ozgur