2012-12-17 4 views
-1

데이터베이스의 여러 데이터를 기반으로 편집 텍스트를 만듭니다. 내 문제는 어떻게 루프에서 만든 편집 텍스트 내부의 텍스트를 검색하고 텍스트 뷰를 인스턴스화 할 수 있습니까?루프에서 텍스트 값 편집

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(); 

나는 여기에서 뭔가를 시도했지만 작동하지 않는 것 같습니다. 그리고 또 다른 것은 편집 텍스트가 비어 있는지 어떻게 확인할 수 있습니까? 예 : 편집 텍스트의 숫자가 3입니다. 키보드에서 뒤로 버튼을 누르면 숫자가 지워집니다. editext가 null입니까? 또는 ""또는 ""와 동등한가요? 감사!

답변

0

가장 쉬운 방법은 arraylist 또는 다른 컬렉션에 추가하는 것입니다. 그런 다음 텍스트를 원하면이 컬렉션을 반복하십시오. 텍스트가 참으로 하늘의 경우


, 당신은

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의 값을 가져 와서 가로로 표시하고 editext2 및 textview2의 다른 버튼 등을 표시합니다. 어떤 아이디어? – ljpv14

+0

그래서 행으로 반복하면 index [0]은 button1과 editext1 및 textview1의 날짜와 관련됩니다. – ljpv14

+0

해당 컬렉션이 있다면'1.', 예. 버튼 arraylist, edittext arraylist 등등 당신은 당신이 단순히 그들의 인덱스에 의해 필요한 모든 것을 참조 할 수 있습니다. 항상 일치하는 경우 (button1은 editext1과 일치 함) 파이처럼 쉽습니다. '2.' 네.하지만 이들은 이름이 없습니다. 나는 당신이 당신의 반복을 위해 "고전적인"루프를 사용하고있을 것이라고 생각 하겠지만, 한번에 이것을 특별히 수행 할 필요는 없다. – mango