2014-01-15 64 views
1

我正在瀏覽一些主題,但無法找到確切答案或至少無法正確顯示。代碼中會發生什麼是我爲數據庫中的每一行創建一個按鈕,並且每個按鈕都應該有一個OnClick,它將我們發送到另一個活動以及一些值(每個按鈕應該有不同的值),但最終似乎我的所有按鈕都具有相同的值,這讓我認爲它只爲所有按鈕創建1個視圖。以編程方式添加按鈕的不同點擊次數

Cursor przepis = bazaUzytkownikow.rawQuery("SELECT * FROM przepisy", null); 
    int liczba_wierszy = przepis.getCount(); 
    przepis.moveToPosition(0); 

    for (int i = 0; i < (liczba_wierszy/4)+1; i++) { 
     LinearLayout row = new LinearLayout(this); 
     row.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
     for (int j = 0; j < 4; j++) { 


      if((przepis.moveToPosition((i*4)+j)!=false)) 
      { 
       nrPrzepisu=(i*4)+j; 
      Button btnTag = new Button(this); 
      btnTag.setLayoutParams(new LayoutParams(115, 60)); 
      btnTag.setText(przepis.getString(przepis.getColumnIndex("nazwa"))); 
      btnTag.setTextSize(10); 
      btnTag.setId(j + 1 + (i * 4)); 


      btnTag.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View t) { 
        // TODO Auto-generated method stub 
        Intent IdzPrzepis = new Intent(getApplicationContext(), DodajPrzepis.class); 
        IdzPrzepis.putExtra("ID_uzytkownika", ID_uzytkownika); 
        IdzPrzepis.putExtra("nr_Przepisu", nrPrzepisu); 
        startActivity(IdzPrzepis); 
       } 
      }); 
      row.addView(btnTag); 
      } 
     } 

     layout.addView(row); 
    } 

爲了使代碼對你更加清晰 - bazaUzytkownikow是我的數據庫,liczba_wierszy是我得到的行數。我將光標移動到開始位置,因爲它是我想要開始的位置,我繼續使用2個循環「剪切」我的數據。我瞄準1排4個按鈕。 我認爲不起作用的部分是OnClick方法,我希望我的按鈕切換活動併發送nrPrzepisu,它基本上是在我的按鈕和數據庫中正確的行之間添加連接(在其他活動中,我想設置文本,從數據庫中讀取行取決於你點擊哪個按鈕)。 我檢查了其他活動,它似乎每次讀取相同的nrPrzepisu,當循環結束時它通常等於nrPrzepisu =(i * 4)+ j的最後一個值,並且它讓我覺得我以某種方式需要爲每個按鈕製作不同的視圖。

回答

1

您正在向每個onClick傳遞相同的對象,然後使用下一次迭代更改該對象。最後,所有onClicks都具有相同的nrPzepisu對象,並且它將返回此示例中最後一個值。

int nrPrzepisu = (i*4) + j; 

這樣您就不會將相同的對象傳遞給所有的onClicks。

+0

我是新手,但在此之後我添加了「final int transfer = nrPrzepisu」。我也可以將它複製到我的意圖,它的工作,謝謝! – user3199264

相關問題