2014-05-10 46 views
0

我根据项目需求在布局中动态创建视图。视图序列来自json。当我点击编辑文本,然后timepicker函数要求在编辑文本中设置时间,但是当我设置编辑文本值时,它会给出最后创建的编辑文本的ID。 这里是我的代码: -如何在android中动态创建编辑文本时点击编辑文本的ID?

for (i = 0; i < alist_interface_type.size(); i++) { 
       if(alist_interface_type.get(i).equals("textbox")) { 
         LinearLayout lLayout = new LinearLayout(getActivity()); 
         lLayout.setOrientation(LinearLayout.VERTICAL); 
         lLayout.setPadding(5, 5, 5, 5); 
         lLayout.setBackgroundColor(Color.parseColor("#E0E0E0")); 
         label = new TextView(getActivity()); 
         label.setText(example.get(i)); 
         label.setTextSize(16); 
         label.setTextColor((Color.parseColor("#01c534"))); 
         label.setPadding(5, 5, 5, 5); 
         et = new EditText(getActivity()); 
         et.setSingleLine(true); 
         et.setId(i); 
         et.setTextSize(18); 
         et.setPadding(5, 5, 5, 5); 
         if (!data_type.get(i).toString().equals("text")) { 
          InputFilter[] filters = new InputFilter[1]; 
          filters[0] = new InputFilter.LengthFilter(Integer.parseInt(data_type.get(i).toString())); 
          et.setFilters(filters); 
         } 
         LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
           LayoutParams.MATCH_PARENT, 
           LayoutParams.WRAP_CONTENT); 
         lLayout.addView(label, lp); 
         lLayout.addView(et, lp); 
         ll.addView(lLayout); 
         lp.setMargins(5, 0, 5, 5); 
         lLayout.setLayoutParams(lp); 
         alist_id.add(i); 
         alist_views.add("EditText"); 
        } 
       else if (alist_interface_type.get(i).equals("time") { 
        LinearLayout lLayout = new LinearLayout(getActivity()); 
        lLayout.setOrientation(LinearLayout.VERTICAL); 
        lLayout.setPadding(5, 5, 5, 5); 
        lLayout.setBackgroundColor(Color.parseColor("#E0E0E0")); 
        label = new TextView(getActivity()); 
        label.setText(example.get(i)); 
        label.setTextSize(16); 
        label.setTextColor((Color.parseColor("#01c534"))); 
        label.setPadding(5, 5, 5, 5); 
        et2 = new EditText(getActivity()) 
        { 
         public boolean getDefaultEditable() { 
          return false; 
         } 
        }; 
        et2.setSingleLine(true); 
        et2.setId(i); 
        et2.setTextSize(18); 
        Log.d("edit text cliked", ""+i); 
        et2.setText(pref.getString(alist_Label_name.get(i),"")); 
        et2.setPadding(5, 5, 5, 5); 
        if (!data_type.get(i).toString().equals("text")) { 
         InputFilter[] filters = new InputFilter[1]; 
         filters[0] = new InputFilter.LengthFilter(Integer.parseInt(data_type.get(i).toString())); 
         et2.setFilters(filters); 
        } 
        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
          LayoutParams.MATCH_PARENT, 
          LayoutParams.WRAP_CONTENT); 
        lLayout.addView(label, lp); 
        lLayout.addView(et2, lp); 
        lp.setMargins(5, 0, 5, 5); 
        lLayout.setLayoutParams(lp); 
        ll.addView(lLayout); 
        alist_id.add(i); 
        alist_views.add("time"); 
        et2.setOnClickListener(new OnClickListener() { 

         @Override 
         public void onClick(View v) { 
          // TODO Auto-generated method stub 

          Log.d("id of edit text", ""+et2.getId()); 
          timePicker(); 
         } 
        }); 
       } 

        } 

在这段代码alist_interface_type是数组列表,包含我的views.If这个列表中包含“时间”,然后创建编辑文字,然后点击编辑文本通话时间选择方法选择的时间和设置编辑文本。我给我的价值编辑文本的ID。单击编辑文本它不会给特定点击编辑文本的ID设置值。 enter image description here

+0

使用setTag()时,时间选择听者回选定的时间和你这段时间设置为您的EditText, –

+0

我认为你有一个监听器为您timepicker()一次选择@BirajZalavadia它不是一个列表视图。我在布局中动态创建视图。 –

+0

方法来识别领域 – Achin

回答

1
// try this way,hope this will help you... 

et2.setTag(et2.getId()); 
et2.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(final View v) { 
     // TODO Auto-generated method stub 

     Log.d("id of edit text", ""+et2.getId()); 
     timePicker(new OnTimeSelected(){ 
      public void onSelect(String time){ 
       ((EditText)v.getTag()).setText(time); 
      } 
     }); 
    } 
}); 


interface OnTimeSelected{ 
    public void onSelect(String time); 
}