2014-10-02 50 views
0

我正在使用按鈕作爲日期選擇器。選擇日期後應該在按鈕上設置日期。我生成此按鈕pro語法或dynamic.When以往我點擊它只會改變事先最後一個按鈕created.Thanks的文字按鈕...如何設置按鈕文本點擊動態生成的按鈕並使用對話框

private void init() { 
    edit = new ArrayList<EditText>(); 
    listButtons = new ArrayList<Button>(); 
    add = (Button) findViewById(R.id.add); 
    dynamic = (LinearLayout) findViewById(R.id.dynamic); 
    params = new LinearLayout.LayoutParams(
      LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    add.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      addLayout(); 
     } 
    }); 

    ok = (Button) findViewById(R.id.ok); 
    ok.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      for(int i = 0;i<edit.size();i++) 
      { 
     String names = edit.get(i).getText().toString(); 
       String Min = listButtons.get(i).getText().toString(); 

     } 
    }); 
    } 


@Override 
protected Dialog onCreateDialog(int id) { 
    switch (id) { 

    case DATE_DIALOG_ID: 
     // set date picker as current date 
     Time today = new Time(Time.getCurrentTimezone()); 
     today.setToNow(); 
     day = today.monthDay; 
     month = today.month; 
     year= today.year; 
     return new DatePickerDialog(this, datePickerListener, year, 
       month, day); 
    } 
    return new DatePickerDialog(this, datePickerListener, year, 
      month, day); 
} 
private DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() { 

    // when dialog box is closed, below method will be called. 
    public void onDateSet(DatePicker view, int selectedYear, 
      int selectedMonth, int selectedDay) { 
     year = selectedYear; 
     month = selectedMonth + 1; 
     day = selectedDay; 
     btn_date.setText(day+"/"+month+"/"+year); 
    } 
}; 
private void addLayout() { 


    LinearLayout ll = new LinearLayout(this); 
    ll.setOrientation(LinearLayout.HORIZONTAL); 
    editText = new EditText(this); 
    editText.setId(j); 
    editText.setText("Test "+(j+1)+"  "); 
    ll.addView(dose); 
    edit.add(dose); 
    // Create Button 
    btn_date = new Button(this); 
    // Give button an ID 
    btn_date.setId(j); 
    btn_date.setHint("Select Date"); 

    // set the layoutParams on the button 
    btn_date.setLayoutParams(params); 

    final int index = j; 
    // Set click listener for button 
    btn_date.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 

      Log.i("TAG", "index :" + index); 

      Toast.makeText(getApplicationContext(), 
        "Clicked Button Index :" + index+dose.getText().toString(), 
        Toast.LENGTH_LONG).show(); 
      System.out.println(dose.getText().toString()); 
      showDialog(DATE_DIALOG_ID+index); 

     } 
    }); 

    //Add button to LinearLayout 
    ll.addView(btn_date); 
    listButtons.add(btn_date);  
    //Add button to LinearLayout defined in XML 
    dynamic.addView(ll); 
    j++;  
} 
} 

回答

1

的onClick有它指的是元素(按鈕)點擊參數View v。投射到按鈕進行的​​setText方法可用

@Override 
    public void onClick(View v) { 
     ((Button)v).setText("whatever"); 
    } 

,如果你想從你的addLayout方法內部訪問,只是通過它作爲一個參數

@Override 
    public void onClick(View v) { 
     addLayout(v); 
    } 
+0

但是我無法通過第一視圖當我創建它....... – Runi 2014-10-03 05:46:54

+0

我不知道我理解你的問題,但我希望你設法找出現在。如果你這樣做,請考慮分享你的發現:-) – 2014-10-07 07:22:37

0

節省你在onclick事件,當在datePickerListener即駁回對話視圖使用它來代替btn_date;像這樣

Button clickedBtnDate = null; 
btn_date.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      clickedBtnDate = (Button)v //instance of the button clicked is saved here in clickedBtnDate 
      Log.i("TAG", "index :" + index); 

      Toast.makeText(getApplicationContext(), 
        "Clicked Button Index :" + index+dose.getText().toString(), 
        Toast.LENGTH_LONG).show(); 
      System.out.println(dose.getText().toString()); 
      showDialog(DATE_DIALOG_ID+index); 

     } 
    }); 

現在datePickerListener做

private DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() { 

    // when dialog box is closed, below method will be called. 
    public void onDateSet(DatePicker view, int selectedYear, 
      int selectedMonth, int selectedDay) { 
     year = selectedYear; 
     month = selectedMonth + 1; 
     day = selectedDay; 
     //btn_date.setText(day+"/"+month+"/"+year); 
     clickedBtnDate.setText(day+"/"+month+"/"+year); 
    } 
};