2013-03-28 31 views
0

有沒有辦法爲兩個不同的按鈕列設置兩個按鈕onclicklisteners(設置在兩個佈局,一個佈局和B佈局,從A1-A8和B1-B8按鈕),以便下一個screnario工作:I想從他們自己的佈局中得到按鈕而不是在他們之間有任何動作(例如,當我點擊A2然後A7什麼都沒有發生時,並且在A7之後,如果我再次單擊A3時什麼也沒有發生,並且仍然如果我點擊A8 ....並且所以ON),但當我點擊例如A1和B7後,我有一些代碼,比較按鈕的文本,該部分工作正常。但我在第一部分中苦苦掙扎,那就是從相同佈局的按鈕點擊時不應該動作的部分。我被建議使用兩個onlicklisteners(現在我只用一個按鈕),但我沒有找到完成的方式。我從導入的prepopulated sqlite數據庫隨機設置文本到按鈕。這裏是我到目前爲止的代碼:如何爲兩組佈局中的兩組按鈕實現兩個onlicklisteners?

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.spojnice); 

     a1 = (Button) findViewById(R.id.bA1); 
     a2 = (Button) findViewById(R.id.bA2); 
     a3 = (Button) findViewById(R.id.bA3); 
     b1 = (Button) findViewById(R.id.bB1); 
     b2 = (Button) findViewById(R.id.bB2); 
     b3 = (Button) findViewById(R.id.bB3); 


     nextQuestion(); 


     } 

public void nextQuestion() { 




     TestAdapter mDbHelper = new TestAdapter(this); 
     mDbHelper.createDatabase(); 

     try{ 

      mDbHelper.open(); 

      Cursor c = mDbHelper.getTestData(generateWhereClause()); 

      mAnsweredQuestions.add(c.getLong(0)); 

      ArrayList<MyStruct> labelsA = new ArrayList<MyStruct>(); 
      ArrayList<MyStruct> labelsB = new ArrayList<MyStruct>(); 

      labelsA.add(new MyStruct(c.getString(2), "1")); 
      labelsB.add(new MyStruct(c.getString(3), "1")); 
      labelsA.add(new MyStruct(c.getString(4), "2")); 
      labelsB.add(new MyStruct(c.getString(5), "2")); 
      labelsA.add(new MyStruct(c.getString(6), "3")); 
      labelsB.add(new MyStruct(c.getString(7), "3")); 

      Collections.shuffle(labelsA); 
      Collections.shuffle(labelsB); 


      question.setText(c.getString(1)); 

      a1.setText(labelsA.get(0).label); 
      a1.setTag(labelsA.get(0).tag); 
      a1.setOnClickListener(clickListener); 
      a1.getBackground().clearColorFilter(); 
      a1.setEnabled(true); 
      b1.setText(labelsB.get(0).label); 
      b1.setTag(labelsB.get(0).tag); 
      b1.setOnClickListener(clickListener); 
      b1.getBackground().clearColorFilter(); 
      b1.setEnabled(true); 
      a2.setText(labelsA.get(1).label); 
      a2.setTag(labelsA.get(1).tag); 
      a2.setOnClickListener(clickListener); 
      a2.getBackground().clearColorFilter(); 
      a2.setEnabled(true); 
      b2.setText(labelsB.get(1).label); 
      b2.setTag(labelsB.get(1).tag); 
      b2.setOnClickListener(clickListener); 
      b2.getBackground().clearColorFilter(); 
      b2.setEnabled(true); 
      a3.setText(labelsA.get(2).label); 
      a3.setTag(labelsA.get(2).tag); 
      a3.setOnClickListener(clickListener); 
      a3.getBackground().clearColorFilter(); 
      a3.setEnabled(true); 
      b3.setText(labelsB.get(2).label); 
      b3.setTag(labelsB.get(2).tag); 
      b3.setOnClickListener(clickListener); 
      b3.getBackground().clearColorFilter(); 
      b3.setEnabled(true); 

     } 

我放在這行代碼在我的XML爲每一個按鈕,標記它的左右佈局,也許會有所幫助。我沒有找到如何使它有所幫助:

android:tag="L" 
android:tag="R" 

爲了比較的目的該代碼工作正常,但它也從相同的佈局比較按鈕,我不能有。如何實現兩個onclicklisteners來管理我的這個問題?

編輯:

我試着用數組,但它沒有奏效。

private static final int[] idArrayA = {R.id.bA1, R.id.bA2, R.id.bA3, R.id.bA4, R.id.bA5, R.id.bA6, R.id.bA7, R.id.bA8}; 
     private static final int[] idArrayB = {R.id.bB1, R.id.bB2, R.id.bB3, R.id.bB4, R.id.bB5, R.id.bB6, R.id.bB7, R.id.bB8}; 

final OnClickListener clickListenerA = new OnClickListener(){ 



     public void onClick(View v) { 
       if (Arrays.asList(idArrayA).contains(v.getId())) { 
        return; 
       }else{ 
//do some code here if pressed buttons are not from the same array 

} 

     } 

     }; 

這是我到目前爲止做的,我沒有在任何地方獲得。有人可以幫我解決一些實際的代碼,包裝這個東西,因爲這使我保持原地。我嘗試過使用兩個onclicklisteners,它根本不工作,實際上它比我開始使用的第一個代碼工作得更好。

我把這個在我的活動範圍:

private Button buttonClicked; 

和兩個onClickListeners:

final OnClickListener clickListenerA = new OnClickListener(){ 


     public void onClick(View v) { 

      Button button = (Button) v; 
      button.getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0x003333)); 

      if (buttonClicked == null) { 
        // first button is clicked 
        buttonClicked = button; 
       } else { 
        // second button is clicked 
        if (buttonClicked.getTag().equals(button.getTag())) { 

         button.getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0x66FF33)); 
         buttonClicked.getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0x66FF33)); 
         buttonClicked.setEnabled(false); 
         button.setEnabled(false); 
         counter = counter + 5; 
         score.setText("Poeni: " + counter); 
        } 
       } 

     } 
     }; 

     final OnClickListener clickListenerB = new OnClickListener(){ 

     public void onClick(View v) { 
      Button button = (Button) v; 
      button.getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0x003333)); 

      if (buttonClicked == null) { 
       // first button is clicked 
       buttonClicked = button; 
      } else { 
       // second button is clicked 
       if (buttonClicked.getTag().equals(button.getTag())) { 

        buttonClicked.getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0x66FF33)); 
        button.getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0x66FF33)); 
        buttonClicked.setEnabled(false); 
        button.setEnabled(false); 
        counter = counter + 5; 
        score.setText("Poeni: " + counter); 
        } 
      } 

     } 

}; 
+0

首先,我建議你使用一個數組,因爲變量名稱只有一個數字。 –

+0

其次,嘗試將您的示例代碼減少到提問您需要的最少數量的按鈕。 (可能是2或4.) –

+0

行,編輯。你能給我一個例子,你將如何處理我的問題與數組? – nabuko

回答

0

有四個按鈕,a1b1a2b2,您可以創建兩個OnClickListeners:一個爲a s和一個爲b s。 OnClickListener應該設置一個標誌,如果它是第一個被點擊的按鈕。然後另一個OnClickListener可以檢查該標誌是否被設置(意味着它是第二個按鈕被點擊)並且檢查它是否與第一個點擊的類別不同。

一旦你得到了很多工作,你可以爲每個類別創建一個數組(或更好的按鈕),以使最終檢查更容易。實際上,只要有點聰明才智,您可以將所有這些都減少爲單個OnClickListener,因爲唯一的區別是數據(即哪些按鈕屬於哪個類別),而不是動作

+0

你可以給我一些代碼怎麼做,導致你對我來說有點高級嗎?但是我可以從你的代碼中學習它。先謝謝你。 – nabuko

+0

@nabuko我建議你一次繼續寫一點代碼。你可以爲'a'按鈕創建一個OnClickListener,它在第一次點擊任何一個按鈕時設置一個布爾標誌。然後從那裏出發。如果您遇到問題,請隨時回來問更多問題。 –

+0

我試着用數組。我上面編輯了我的問題,看看它在帖子的底部。 – nabuko