2015-08-15 75 views
0

我想在Android Studio中開發一個程序,它在Eclipse中效果很好。但是按鈕,聽衆和方法的新穎複雜性阻礙了我:我收集了類似的按鈕,並採取了類似的操作。它們只有一個指數值不同。我試圖創建一個對象類,名爲bouton,擴展按鈕並帶有一個帶有參數j的實例方法。但它不起作用。到目前爲止,有效的方法是重複每個按鈕的代碼,如下面的兩個按鈕所示。該代碼部分準備for循環,但我的企圖讓我無處可去。如何處理類似的按鈕和方法的集合

package com....; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

public class MainActivity extends AppCompatActivity { 

    // public static Button boutons[]; 

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

     actionBouton1(); 
     actionBouton2(); 
    } 


    private void actionBouton1() { 
     String buttonID = "bouton" + 1; 
     int resID = getResources().getIdentifier(buttonID, "id", getPackageName()); 
     final Button btnGenerique = (Button) findViewById(resID); 
     final TextView monMessage = (TextView) findViewById(R.id.affichage); 
     View.OnClickListener monEcouteur = new View.OnClickListener(){ 
      @Override 
      public void onClick(View v){ 
       monMessage.setText("you clicked button "+1); 
      } 
     }; 
     btnGenerique.setOnClickListener(monEcouteur); 
    } 


    private void actionBouton2() { 
     String buttonID = "bouton" + 2; 
     int resID = getResources().getIdentifier(buttonID, "id", getPackageName()); 
     final Button btnGenerique = (Button) findViewById(resID); 
     final TextView monMessage = (TextView) findViewById(R.id.affichage); 
     View.OnClickListener monEcouteur = new View.OnClickListener(){ 
      @Override 
      public void onClick(View v){ 
       monMessage.setText("you clicked button "+2); 
      } 
     }; 
     btnGenerique.setOnClickListener(monEcouteur); 
    } 

}// fin class MainActivity 



<RelativeLayout 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:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="btn 1" 
     android:id="@+id/bouton1" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_marginTop="100dp" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="btn 2" 
     android:id="@+id/bouton2" 
     android:layout_alignTop="@+id/bouton1" 
     android:layout_toRightOf="@+id/bouton1" 
     android:layout_toEndOf="@+id/bouton1" 
     android:singleLine="true" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="Large Text" 
     android:id="@+id/affichage" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_marginTop="200dp" /> 

</RelativeLayout> 
+0

所以要動態地添加按鈕? –

+0

我不明白你想要做什麼。你能澄清一下嗎? – Henry98

+0

嗨。我不知道現在爲什麼所有的負擔得到一個RES ID:INT渣油= getResources()則getIdentifier(buttonID, 「ID」,getPackageName());您可以通過執行(Button)findViewById(R.id.buttonId)來獲取代碼上的按鈕實例; – MarkSkayff

回答

1

有幾個將事件添加到多個按鈕的最佳實踐。

首先,我想發表評論,你不需要創建活動的具體方法爲每個單獨的按鈕,按鈕的事件。你可以創建一個名爲buttonEvents的方法,或者其他任何方法,並將所有事件附加到那裏。

首先建議的方法

只是附着和一次性定義事件:

Button button = (Button)findViewById(R.id.buttonId) 
button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      // Perform action on click 
     } 
    }); 

所以基本上這些都是「兩線」的每個按鈕和事件附加代碼。

第二所建議的方法

可以實現OnClickListener的活動類和@Override OnClick方法是這樣的:

public class SomeClassOfMine extends Activity implements OnClickListener{ 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
//... some other code here to init the layout 
    Button btn1 = (Button)findViewById(R.id.button1); 
    Button btn2 = (Button)findViewById(R.id.button2); 
    btn1.setOnClickListener(this); 
    btn2.setOnClickListener(this); 
} 

@Override 
public void onClick(View v) { 
    switch(v.getId()){ 
     case R.id.button1: 
      break; 
     case R.id.button2: 
      break; 
    } 

漁獲在這最後是在onclick方法。你在交換機中看到你做了v.getId()。該方法爲您提供非常具體的按鈕資源ID。所以在交換機中你可以區分幾個按鈕事件。

有一個按鈕的ArrayList的

如果你有一個按鈕的ArrayList中,你可以使用Java的foreach,而不是像這樣:

// Say you have this below initialized somewhere ... 
ArrayList<Button> myButtons; 

// The foreach or for..in construction 
for (Button but : myButtons){ 
    but.setOnClickListener(new View.OnClickListener(){ 
     //@Override 
     public void onClck(View v){ 
     // Do something for this button 
     } 
}); 
+0

非常感謝您!這看起來不錯。由於我是Android Studio的新手(也是Java),它會讓我忙到一兩天。 – Andy

+0

好吧,我增加了使用一個ArrayList

+0

我喜歡你的評論。他們非常有教育意義並且很有幫助。我確實爲他們投了票,但目前我還沒有足夠的信用來支持我的投票。謝謝 – Andy

相關問題