2012-12-17 38 views
-1

我基于数据库中的许多数据创建编辑文本。我的问题是如何检索从循环创建的编辑文本中的文本并仅实例化textview?从循环中获取编辑文本值

DBAdapter db = new DBAdapter(this); 
     db.open(); 

     Cursor c = db.getUserExercises(Integer.parseInt(id), musclegroup); 
     tag = new int[c.getCount()]; 
     int n = 0; 
     if(c.moveToFirst()) 
     { 

      do{ 
       LinearLayout linearlayout = new LinearLayout(this); 
       TextView tv = new TextView(this); 
       tv.setText(c.getString(0)); 
       tv.setTextColor(Color.DKGRAY); 
       tv.setPadding(10, 10, 10, 10); 

       et = new EditText(this); 
       et.setPadding(5, 5, 5, 5); 
       et.setText(c.getString(1)); 
       et.setEms(2); 
       et.setGravity(Gravity.CENTER); 
       InputFilter maxLengthFilter = new InputFilter.LengthFilter(1); 
       et.setFilters(new InputFilter[]{ maxLengthFilter }); 

       update = new ImageButton(this); 
       update.setBackgroundResource(R.drawable.updatebtn); 
       update.setTag(tag[n++]); 
       update.setOnClickListener(new View.OnClickListener() { 

        public void onClick(View v) { 

         for(int i=0;i<tag.length;i++) 
         { 
          if(Integer.parseInt(update.getTag().toString()) == i) 
          { 
           Toast.makeText(getBaseContext(), update.getTag().toString(), Toast.LENGTH_SHORT).show(); 
          } 
         } 
        } 
        }); 


       TextView border1 = new TextView(this); 
       border1.setHeight(2); 
       border1.setBackgroundResource(android.R.color.darker_gray); 

       mainLayout.addView(linearlayout); 
       linearlayout.addView(tv); 
       linearlayout.addView(et); 
       linearlayout.addView(update); 
       mainLayout.addView(border1); 

      }while(c.moveToNext()); 



     } 
     db.close(); 

我在这里尝试了一些东西,但它似乎并没有工作。另一件事,我如何检查编辑文本是否为空?例如:编辑文本有三个数字,当我按下键盘上的后退按钮时,数字将被删除。 editext是否为空?还是等于“”或“”?谢谢!

回答

0

我认为最简单的方法是在创建它们时将它们添加到数组列表或其他集合中。然后在你想要文本时循环访问这个集合。


如果你的文字确实是空的,你可以尝试像

if(et.getText().toString().length() <= 0) 

我真的认为这种事情会更适合于一个列表视图,但如果必须进行这种方式看看下面是否有道理。

DBAdapter db = new DBAdapter(this); 
     db.open(); 
     Cursor c = db.getUserExercises(Integer.parseInt(id), musclegroup); 
     int total = c.getCount();  

     arrEt = new EditText[total]; 
     arrTv = new TextView[total]; 
     arrStr = new String[total]; 

     int n = 0; 
     while (c.moveToNext()) { 
      // creation code block 
      LinearLayout linearlayout = new LinearLayout(this); 

      TextView tv = new TextView(this); 
      tv.setText(c.getString(0)); 
      tv.setTextColor(Color.DKGRAY); 
      tv.setPadding(10, 10, 10, 10); 

      EditText et = new EditText(this); 
      et.setPadding(5, 5, 5, 5); 
      et.setText(c.getString(1)); 
      et.setEms(2); 
      et.setGravity(Gravity.CENTER); 
      InputFilter maxLengthFilter = new InputFilter.LengthFilter(1); 
      et.setFilters(new InputFilter[]{ maxLengthFilter }); 

      ImageButton update = new ImageButton(this); 
      update.setBackgroundResource(R.drawable.updatebtn); 
      update.setTag(n); 
      update.setOnClickListener(listener); 
      //^ the tagging and listener 

      TextView border1 = new TextView(this); 
      border1.setHeight(2); 
      border1.setBackgroundResource(android.R.color.darker_gray); 

      // add to layout 
      mainLayout.addView(linearlayout); 
      linearlayout.addView(tv); 
      linearlayout.addView(et); 
      linearlayout.addView(update); 
      mainLayout.addView(border1); 

      // add to arrays 
      arrEt[n] = et; 
      arrTv[n] = tv; 

      n++; 
     } 
    } 

    OnClickListener listener = new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      int index = (Integer) v.getTag(); 
      String value = arrEt[index].getText().toString(); 
      arrStr[index] = value; 
     } 
    }; 
+0

不错的答案,嗯如果我要将某个按钮与某个数据关联起来。是否有可能使多行的集合?例如:button1获取editext1和textview1中的值,并且它们显示为horizo​​ntaly,另一个editext2和textview2等等的按钮。有任何想法吗? – ljpv14

+0

因此,如果迭代到该行,index [0]与button1和editext1和textview1中的日期有关。 – ljpv14

+0

'1.'如果你有相应的集合,例如。按钮arraylist,edittext arraylist等,那么你可以简单地通过它们的索引来引用你需要的任何东西。如果它们总是相应的(button1与editext1相匹配),它会很容易。 '2,是的,但是这些名字不会有。我想你会在你的迭代中使用“经典”循环,你不应该一次做这个具体的索引。 – mango