2014-11-21 40 views
0

第一組edittexts被整齊地添加到另一個下方,但再次單擊該按鈕時,視圖重疊。我想我需要適當地設置利潤率,但我無法弄清楚。請幫忙。我想以編程方式向RelativeLayout添加一對EditTexts,點擊一個按鈕

public class MainActivity extends Activity implements OnClickListener { 
    Button btn_task, btn_subTask; 
    EditText et_task, et_subTask; 
    RelativeLayout lv_subtask, lv_task; 
    int i = 0; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     btn_task = (Button) findViewById(R.id.btn_addTask); 
     btn_subTask = (Button) findViewById(R.id.btn_subTask); 
     lv_subtask = (RelativeLayout) findViewById(R.id.lv_subtask); 
     lv_task = (RelativeLayout) findViewById(R.id.lv_task); 

     // btn_task.setOnClickListener(this); 
     btn_subTask.setOnClickListener(this); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    @Override 
    public void onClick(View v) { 

     if (v.equals(btn_subTask)) { 
      EditText et_title = new EditText(this); 
      EditText et_date = new EditText(this); 
      i++; 
      et_title.setId(i); 
      et_date.setId(i + 1); 
      et_title.setHint("Enter sub task"); 
      et_date.setHint("Enter end date"); 
      // lv_subtask.setVisibility(View.VISIBLE); 
      RelativeLayout.LayoutParams EditLayoutParams = new RelativeLayout.LayoutParams(
        LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
      RelativeLayout.LayoutParams DateLayoutParams = new RelativeLayout.LayoutParams(
        LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
      DateLayoutParams.setMargins(5, 10, 0, 0); 
      EditLayoutParams.setMargins(5, 20, 0, 0); 
      if (i != 1) { 
       EditLayoutParams.addRule(RelativeLayout.BELOW, i + 1); 
       DateLayoutParams.addRule(RelativeLayout.BELOW, i + 2); 

      } else { 
       DateLayoutParams.addRule(RelativeLayout.BELOW, 1); 
      } 
      et_title.setLayoutParams(EditLayoutParams); 
      et_date.setLayoutParams(DateLayoutParams); 
      (lv_subtask).addView(et_title); 
      (lv_subtask).addView(et_date); 

     } 

    } 
} 
+0

你爲什麼不'else'聲明中添加任何'Rule'到'EditLayoutParams'? – 2014-11-21 20:28:53

回答

0

它看起來不像您正確使用計數器。首先,每次onClick被調用時,您只會將其遞增1,但您要添加2個視圖。此外,當您嘗試將新視圖放在以前的視圖下方時,您的添加到您的計數器中,這會引用您尚未設置的ID。試試這個:

if (v.equals(btn_subTask)) { 
    EditText et_title = new EditText(this); 
    EditText et_date = new EditText(this); 
    et_title.setId(++i); // 1, 3, ... 
    et_date.setId(++i); // 2, 4, ... 
    et_title.setHint("Enter sub task"); 
    et_date.setHint("Enter end date"); 
    // lv_subtask.setVisibility(View.VISIBLE); 
    RelativeLayout.LayoutParams EditLayoutParams = new RelativeLayout.LayoutParams(
      LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    RelativeLayout.LayoutParams DateLayoutParams = new RelativeLayout.LayoutParams(
      LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    DateLayoutParams.setMargins(5, 10, 0, 0); 
    EditLayoutParams.setMargins(5, 20, 0, 0); 
    if (i != 2) { 
     EditLayoutParams.addRule(RelativeLayout.BELOW, i - 2); // below last view added 
    } 
    DateLayoutParams.addRule(RelativeLayout.BELOW, i - 1); // always below current edit 
    et_title.setLayoutParams(EditLayoutParams); 
    et_date.setLayoutParams(DateLayoutParams); 
    (lv_subtask).addView(et_title); 
    (lv_subtask).addView(et_date); 

} 
+0

感謝您指出錯誤。您的解決方案奏效謝謝 – 2014-11-21 21:10:03

0

兩年Edittexts就神奇地出現有隱藏在佈局EditTexts,然後讓他們看到在onclick的按鈕。訣竅是當你設計這些東西時,它們總是可見的,並且在應用程序啓動時隱藏它們。

爲可見性定義布爾值,然後在onResume中使用布爾值來設置可見性。

boolean ismyedittextvisible = false; 


public void onResume(); 
    super.onResume(); 
    view.findViewById(R.id.myedittext) 
       .setVisibility(ismyedittextvisible ? View.VISIBLE : View.GONE); 

在按鈕的onClick()的toogle布爾值,並刷新visisbility

@Override 
public void onClick(final View v) { 
    if (v.getId() == R.id.mybutton) { 
     ismyedittextvisisble = !ismyedittextvisible; 
     view.findViewById(R.id.myedittext) 
       .setVisibility(ismyedittextvisible ? View.VISIBLE : View.GONE); 
    } 
} 
+0

感謝您的建議。但是我想這會對我需要查看一次的情況有所幫助。但在這裏,我將添加一對編輯文本,每次點擊按鈕。 – 2014-11-21 21:06:52

相關問題