2013-07-28 53 views
1

我已經在佈局中增加了一些按鈕:從編程添加按鈕獲取OnClick()?

LinearLayout row = (LinearLayout)findViewById(R.id.KeysList); 
    keys=db.getKeys(console); 

    my_button=new Button[keys.size()]; 
    for (bt=0;bt<keys.size();bt++){ 
      my_button[bt]=new Button(this); 
      my_button[bt].setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.FILL_PARENT)); 
      my_button[bt].setText(keys.get(bt)); 
      my_button[bt].setId(bt); 
      row.addView(my_button[bt]); 
      my_button[bt].setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        if (my_button[bt].getId() == ((Button) v).getId()){ 
         Toast.makeText(getBaseContext(), keys.get(bt), 0).show(); 
        } 
       } 
      }); 
     } 


我想知道的是點擊了哪個按鈕,以及如何獲得點擊的按鈕的文字?
而我認爲在這裏使用bt似乎不起作用!

回答

5

此代碼正在運行。我希望它幫你:)

final ArrayList<String> Keys = new ArrayList<String>(); 
    for(int i = 0; i < 10; i ++){ 
     Keys.add("Keys is : " + String.valueOf(i)); 
    } 

    LinearLayout Row = (LinearLayout)findViewById(R.id.KeysList); 

    final Button[] my_button = new Button[Keys.size()]; 

    for (int bt = 0; bt < Keys.size(); bt ++){ 
     final int Index = bt; 

     my_button[Index] = new Button(this); 
     my_button[Index].setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT)); 
     my_button[Index].setText(Keys.get(Index)); 
     my_button[Index].setId(Index); 

     my_button[bt].setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (my_button[Index].getId() == ((Button) v).getId()){ 
        Toast.makeText(getBaseContext(), Keys.get(Index), 0).show(); 
       } 
      } 
     }); 

     Row.addView(my_button[Index]); 
    } 

ExampleProject ID:Your project

+0

作品!關鍵是: final int Index = bt; – joan16v

1

您應該使用View#setTag來設置一些您希望與按鈕關聯的任意數據。然後,您可以只實例化一個OnClickListener,然後使用getTag並以您需要的任何方式處理該數據。

+0

謝謝!這個很好的答案應該被標記爲解決方案,因爲它更清晰可讀。 –

0

另一種方法是讓您的活動聽取所有按鈕的點擊,然後您只需對該ID進行過濾。你不應該得到按鈕的文本,並使用它。你應該使用你自己的標識符類型,理想的想法應該是足夠的。或者你也可以使用setTag作爲@qberticus描述的。

0

考慮這個例子:

public class MainActivity extends Activity implements View.OnClickListener 
{ 

LinearLayout linearLayout; 
Button [] button; 
View.OnClickListener listener; 
@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    linearLayout=(LinearLayout)findViewById(R.id.parent_lay); 
    String[] array={"U123","U124","U125"}; 
    int length=array.length; 
    System.out.println("11111111111111111111111111"); 
    button=new Button[length]; 
    for(int i=0;i<length;i++) 
    { 
     button[i]=new Button(getApplicationContext()); 
     button[i].setId(i); 
     button[i].setText("User" + i); 
     button[i].setOnClickListener(this); 
     linearLayout.addView(button[i]); 
    } 
} 
@Override 
public void onClick(View view) 
{ 
    view.getId(); 
    Button button=(Button)findViewById(view.getId()); 
    button.setText("Changed"); 
} 
} 

這工作得很好:)

+0

已經修復,但無論如何 – lvle