2011-08-18 9 views
1

루프를 사용하여 5 개의 클릭 가능한 텍스트 뷰 배열을 만들고 매개 변수 (크기, 색상, 배경 이미지 등을 클릭 가능하도록 설정)를 설정하고 onClickListener를 설정하고 배열을 호출했습니다. "myArrayofTVs". 이들의 id는 루프 int (i)를 사용하여 설정됩니다. 나는 텍스트 문자열을 보유하는 또 다른 사전 정의 된 배열을 가지고 있으며 다른 textviews는 레이아웃에 있습니다. 이러한 스위치를 사용하는 등프로그래밍 방식으로 생성 된 버튼의 onClick 메서드

@Override 
public void onClick(View v) { 

if(v == myArrayofTVs[i]) {    //using 'i' here doesn't seem to work 
tv1.setText(myArray2[i]); 
tv2.setText(myArray2[i+1];} 
etc 
etc} 

내가 해봤 다양한 differnt 한 방법 : 나중에 모든 버튼/클릭 textviews 매우 비슷한 수행의 onclick 방법, 그리고 같은, 내가 좋아하는 뭔가를 할 수 있도록하고 싶습니다 case 문 (실제로 반복 코드가 많을 것이므로이 코드를 사용하고 싶지는 않으며 이후에 새 textview/단추를 추가 할 때마다 새 case 문을 추가해야합니다). 어쨌든 주어진 변수 ID를 기반으로 모든 버튼/클릭 가능한 textviews를 처리 할 하나의 명령문을 사용하고 있습니까? 아니면 각각에 대해 별도의 case/tag/id 문을 사용해야합니까?

미리 감사드립니다.

답변

0

ViewGroup에 뷰를 추가하고 getChildAt (int index) 및 getChildCount()를 사용하여 루프를 만듭니다. 뷰 그룹에서 모든 하위 뷰를 반복 할 수 있으며 올바른 유형의 뷰일 경우

if(child instanceof TextView) 

으로 확인할 수 있습니다. 그런 다음 뷰를 다시 TextView/Button/View로 캐스팅하고 원하는 작업을 수행 할 수 있습니다.

하지만 뭔가 목록이 필요한 것 같습니다. 그래서 그것 뒤에 어댑터와 ListView를 사용하는 것이 좋습니다.

0

정말 개체를 비교하는 대신 Android에서 제공하는 ID를 사용해야한다고 생각합니다. 코드가 제대로 작동하지 않는 이유는 다소 이상한 일이지만, ID와 객체를 비교하여 가능한 한 많은 스위치 구문을 병렬 처리하려고합니다.

for(int i = 0; i < myArrayofTvs.length; i++) 
    if(v.getId() == myArrayofTVs[i].getId()) {    
     tv1.setText(myArray2[i]); 
     tv2.setText(myArray2[i+1]; 
    } 
} 

분명히 두 번째 inner 문에서 배열 범위를 벗어나는 오류를 피하기를 원할 것입니다.

0

내가 한 일은 프로그래밍 방식으로 내 사용자 정의 레이아웃을 부 풀리고 사용자 정의 레이아웃에서 해당 버튼에 onClickListener를 사용했습니다. 그런 다음 특정 항목과 상호 작용하려면 클릭 한 뷰의 상위보기가 있습니다. 버튼을 클릭 한 다음 해당보기를 사용하여보기의 속성을 변경하십시오. 이것은 내 코드 스 니펫입니다. alertDialog의 onClick은 새로 부 풀린 뷰의 값을 변경하는 곳입니다.

  // if an edit button of numbers row is clicked that number will be edited 
     if (view.getId() == R.id.NumberRowEditButton) 
     { 
      AlertDialog.Builder alert = new AlertDialog.Builder(this); 

      alert.setTitle("Contact edit"); 
      alert.setMessage("Edit Number"); 

      // Set an EditText view to get user input 
      final EditText input = new EditText(this); 

      input.setSingleLine(); 
      alert.setView(input); 

      alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() 
      { 
       public void onClick(DialogInterface dialog, int whichButton) 
       { 
        // get input 
        Editable value = input.getText(); 
        if(value.length() > 4){ 

         View tempView = (View) view.getParent(); 
         TextView tempTV = (TextView) tempView.findViewById(R.id.numberRowTextView); 
         String number = tempTV.getText().toString(); 

         tempTV.setText(value.toString()); 
        } 
        else 
        { 
         // ...warn user to make number longer 
         final Toast msgs = Toast.makeText(ContactEdit.this, "Number must be over 4 digits.", Toast.LENGTH_SHORT); 
         msgs.setGravity(Gravity.CENTER, msgs.getXOffset()/2, msgs.getYOffset()/2); 
         msgs.show(); 
        } 
       } 
      }); 

      alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() 
      { 
       public void onClick(DialogInterface dialog, int whichButton) 
       { 
        // cancel the dialog 
        dialog.cancel(); 
       } 
      }); 

      alert.show(); 
     } 

이 정보가 도움이되기를 바랍니다.

관련 문제