2011-08-15 2 views
0

선택 목록을 구현하려고합니다. 각 항목은 이미지 뷰입니다.
사용자가보기를 클릭하면 사용자 정의 대화 상자가 열리고 목록에 56 개의 ImageView가 표시됩니다.
사용자는 하나를 클릭하여 선택할 수 있습니다.
imageviews에는 다음과 같은 이미지가 있습니다. items_r1_c1 ... items_r56_c1.
각 이미지 뷰에 onClickListeners를 구현해야합니다. 내가 예상 동작을 받고 있지 않다 그러나onClick 리스너에서 배열의 여러 항목을 설정합니다.

private int i; // This is int the outer class. 
... 
private ImageView [] spec = new ImageView[56]; 
myView.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       //set up dialog 
       try { 
        final Dialog dialog = new Dialog(context); 
        dialog.setContentView(R.layout.myCustomList); 
        dialog.setTitle("Select one of 56"); 
        dialog.setCancelable(true); 
        dialog.show(); 

        String s = null; 

        //This is where I automate the ImageView object creation 
        for (i=2; i<=56; i++) { 

         s = "items_r"+Integer.toString(i)+"_c1"; 
         spec[i] = (ImageView) findViewById(getResources().getIdentifier(s,"drawable",getPackageName())); 

         spec[i].setOnClickListener(new OnClickListener() {      
          @Override 
          public void onClick(View v) { 
           myItem.setItem(Integer.toString(i)); 
           if(i == 0) myItem.setItem("invalid"); 
           Log.e(tag, myItem.getItem()); 
           dialog.dismiss(); 

          } 
         }); 
        } 
       } catch (Exception e) { 
        Log.e(tag, e.toString()); 
       } 
      } 

:
대신 내가 이런 짓을.
내가 뭘 잘못하고 있니? 56 onClick 리스너를 작성하는 대신이 작업을 수행하는 효율적인 방법은 무엇입니까?
감사합니다.

답변

0

처음에는 dialog.show() 호출 전에 for(...) 루프를 넣었습니다.

더 일반적인 질문에 대답하려면 ListView.setOnItemClickListener() 메서드를보십시오. http://developer.android.com/reference/android/widget/AdapterView.html#setOnItemClickListener(android.widget.AdapterView.OnItemClickListener).

ListView에 하나의 수신기 만 등록하면됩니다. ListView의 항목을 클릭하면 void onItemClick(AdapterView<?> parent, View view, int position, long id) 아래의 코드로 끝납니다. 위치는 클릭 된 행의 인덱스입니다 (루프의 i에 해당).

+0

감사합니다. 변경합니다. – Brahadeesh

관련 문제