2017-10-05 20 views
1

私はTextViewには、配列の要素として、B、C、D、Eをオブジェクトとループのために使用してコードを最小化したいです。 findViewByIdとsetOnClickListenerの両方の実装。^__^forループでTextViewオブジェクトの配列を実装する方法は?

  • 私が通常TextViewの実装を行う方法は次のとおりです。しかし、私は 多くの行を無駄に書くことに飽き飽きしています。

    TextView a、b、c、d、e;

    TextView a,b,c,d,e; 
    
    a=(TextView)findViewById(R.id.A); 
    b=(TextView)findViewById(R.id.B); 
    c=(TextView)findViewById(R.id.C); 
    d=(TextView)findViewById(R.id.D); 
    e=(TextView)findViewById(R.id.E); 
    

    のTextView [] textViews:私はすべて、すでに以下のよう として問題なくsetOnClickListener()を呼び出すために のTextViewオブジェクトを初期化を設定するためにループを使用できるかどうか私の質問がある

    a=(TextView)findViewById(R.id.A); 
        b=(TextView)findViewById(R.id.B); 
        c=(TextView)findViewById(R.id.C); 
        d=(TextView)findViewById(R.id.D); 
        e=(TextView)findViewById(R.id.E); 
    
        a.setOnClickListener(this); 
        b.setOnClickListener(this); 
        c.setOnClickListener(this); 
        d.setOnClickListener(this); 
        e.setOnClickListener(this); 
    
  • = {a、b、c、d、e};

    for (int count = 0; count < textViews.length; count++) { 
        textViews[count].setOnClickListener(this); 
    } 
    

**

  • 私が知りたいすべてが、TextViewには 、B、C、Dをオブジェクトと同じように電子を初期化する方法ですが、私はsetOnClickListenerに示しました。彼らのために?このような何か、

    TextView[] textViews = {a, b, c, d, e}; 
    
    int[] textViewIds = {R.id.a, R.id.b, R.id.c, R.id.d, R.id.e}; 
    
    for (int count = 0; count < textViews.length; count++) { 
        textViews[count] = (TextView)findViewById(textViewIds[count]); 
    } 
    

**

+3

idsをリスト/配列に入れ、ループします。 –

+0

私は@bubに同意する – MetaSnarf

答えて

1

//クラスの初めにグローバル変数としてビューオブジェクトを宣言参照

View v_home, v_earning, v_rating, v_account; 

//ビューのためのビューとint配列のためのビューの配列を作成します。 IDは

View[] views ={v_home, v_earning, v_rating, v_account}; 
int[] viewsID ={R.id.v_home, R.id.v_earning, R.id.v_rating, R.id.v_account}; 

//次にfindViewByIdとループの内側setOnClickListener

for (int v=0;v<views.length;v++){ 
     views[v] = findViewById(viewsID[v]); 
     views[v].setOnClickListener(this); 
    } 
3

これは私が

ArrayList<TextView> textViews = new ArrayList<TextView>(); 

int[] tvIds = {R.id.A,R.id.B,R.id.C,R.id.D,R.id.E}; 

for(int index= 0; index<tvIds.length/* or .count forgot sorry*/; index++){ 

TextView tv = (TextView)findViewById(tvIds[index])); 
tv.setOnClickListener(this); 

textViews.add(tv); 

} 

(私はミスのためにとても残念、ここでコンパイラを持っていけない)それを書くだろうか、使用できる方法れます@ハンク・ムーディーは答えました、バターナイフはかなり簡単です。

2

私は、結合ビューのButterKnifeを使用していて、それはあなたがやりたいのに最適な方法があります。

あなたは、あなたがこのように、「アクション」で、このリストに切り抜いた操作を適用することができます一覧

@BindViews({ R.id.first_name, R.id.middle_name, R.id.last_name }) 
List<TextView> nameViews; 

にビューをバインドすることができ、すべてのファースト:

static final ButterKnife.Action<View> SET_CLICK = new ButterKnife.Action<View>() { 
@Override 
public void apply(View view, int index) { 
    view.setOnClickListener(....listener); 
    } 
}; 

そして、このアクションを適用する

ButterKnife.apply(nameViews, DISABLE); 

例を参照してください。here

UPD:あなたはKotlinを使用している場合は、Kotter Knife

関連する問題