2011-02-16 120 views
0

我正在製作一個應用程序,根據用戶輸入的值生成按鈕。每個按鈕都有自己定義在XML中的函數。現在我的主要問題是如何縮短這些代碼。安卓按鈕問題

name[0].setClickable(true); 
    name[0].setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      name[0].setText("kjghjbjhb"); 
     } 
    }); 
    name[2].setClickable(true); 
    name[2].setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      name[2].setText("kjghjbjhb"); 
     } 
    });name[1].setClickable(true); 
    name[1].setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      name[1].setText("kjghjbjhb"); 
     } 
    }); 

和洙.....一遍又一遍寫這些代碼是不可能的,因爲產生的按鈕是動態的,我不知道有多少按鍵將會產生。請告訴我們是否有其他方式可以做到這一點。

回答

0

那麼你看到它的退出容易..

在這裏,我指定要執行的步驟。

  1. 您必須通過新的Button()創建按鈕;只需在集合中保存其引用即可ArrayList

ArrayList ar = new ArrayList();

Button b1 = new Button(); ar.add(b1);

  1. 現在創建一個實現View.OnClickListener的私有內部類。現在,按照規則執行的OnClick()等做你想要的東東在那裏

A級延伸活動{// 你這裏的OnCreate和其他商業邏輯

私人最終的東西類myListener的實現View.OnClickListener {

public void onClick(View v) { 
     // TODO Auto-generated method stub 
     v.setText("kjghjbjhb"); 
    } 

}

}

請注意,我在onClick中設置了對象v引用的文本。也讓這個類單身。

  1. 現在設置創建這個類的實例(如MyListerner將是單例的對象將是一個)在setOnClickListener()這樣

myListener的聽者= MyListener.getInstance(); b.setOnClickListener(listener);

當某些事件或用戶動作創建按鈕時,您可以選擇這種方式。如果你需要在循環中創建按鈕,你可以使用循環中的第一步和第三步。

我希望這對你有幫助。

3

是這樣的嗎?

createButton(int i){ 
     name[i].setClickable(true); 
     name[i].setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       name[i].setText("kjghjbjhb"); 
      } 
     }); 
    } 

使用這種方法,你也可以做一個for循環:

for (int i = 0; i<name.length; i++){ 
     createButton(i); 
    }