2013-03-12 1 views
1

내 응용 프로그램에는 목록보기, 목록보기 항목에는 하나의 TextView와 하나의 단추 및 기타 이미지가 있습니다. 및 ViewHolder 패턴을 사용합니다. 버튼이 어떻게 버튼의 onclick에 텍스트 뷰를 제어 할 수 버튼으로 텍스트보기를 제어하는 ​​방법 getView 메소드에서 OnClick을 사용하는 방법

를 클릭 내가 텍스트 뷰의 텍스트를 변경하려면

?

public class AListAdapter extends ArrayAdapter<MyData> { 

    static class ViewHolder { 

     TextView viewCountView; 

     ImageButton myButton; 

     ImageView profileImageView; 

    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     final AListAdapter adapter = this; 
     ViewHolder holder = null; 


     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.cell parent, false); 
      TextView viewCountView = (TextView) convertView.findViewById(R.id._view_count_); 
      Button likeButton = (ImageButton) convertView.findViewById(R.id._like_button); 
      LoadImageView profileImageView = (LoadImageView) convertView.findViewById(R.id.albumlist_profile_image); 

      holder = new ViewHolder(); 
      holder.viewCountView = viewCountView; 
      holder.likeButton = likeButton; 
      holder.profileImageView = profileImageView; 

      holder.likeButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        // how to controll TextView?????????????????? 
       // when click i want to change textview 
        //like holder.viewCountView.setText("clicked"); 
       } 
      }); 

      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     MyData data = (MyData) adapter.getItem(position); 
     if (data != null) { 

      holder.viewCountView.setText(String.valueOf(data.viewCount) + "views"); 
      //image settings 
     } 
     return convertView; 
    } 
+1

이 viewCountView.setText ("clicked")의 문제는 무엇입니까? – DjHacktorReborn

+0

이 코드로 어떤 오류가 있습니까? –

+0

viewHolder는이 범위에서 액세스 할 수 없습니다. – dmnlk

답변

6

이 경우에는 로컬 변수를 사용할 수 없습니다. onClickListener가 호출 될 때까지 변수가 범위를 벗어났습니다.

그래서 그 대신 당신이 너무 단추의 태그로 ViewHolder을 설정할 수 있습니다, 당신은() 부분 후에 다른 사람이 코드를 넣어 당신의 onClick 처리기

holder.likeButton.setTag(holder); 
holder.likeButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     ViewHolder mH = (ViewHolder) v.getTag(); 

     mH.viewCountView.setText("clicked"); 
    } 
}); 
+0

나는 'ViewHolder mH = (ViewHolder) v.getTag();'에서 ClassCastExeption을 얻었습니다. – dmnlk

+0

이것이 작동하지 않는 이유는 확실하지 않습니다. 나는 전에 그것을 사용했다, 당신의 코드는 다르게 잘 보인다. 이 작은 오류를 해결하고 시도해 주시겠습니까? ('Button likeButton = (ImageButton) convertView.findViewById (R.id._like_button)'), 여러분은 XML 코드에서 정의한 방법에 따라'ImageButton likeButton = ... ' –

+0

또는 Button을 양쪽에 사용해야합니다. –

0

에서 그 액세스 할 수 있습니다

 holder.likeButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       holder.viewCountView.setText("clicked"); 
      } 
     }); 

이런 식으로

if (convertView == null) { 
     convertView = inflater.inflate(R.layout.cell parent, false); 
     TextView viewCountView = (TextView) convertView.findViewById(R.id._view_count_); 
     Button likeButton = (ImageButton) convertView.findViewById(R.id._like_button); 
     LoadImageView profileImageView = (LoadImageView) convertView.findViewById(R.id.albumlist_profile_image); 

     holder = new ViewHolder(); 
     holder.viewCountView = viewCountView; 
     holder.likeButton = likeButton; 
     holder.profileImageView = profileImageView; 

     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    MyData data = (MyData) adapter.getItem(position); 
    if (data != null) { 

     holder.viewCountView.setText(String.valueOf(data.viewCount) + "views"); 
     //image settings 
    } 


    holder.likeButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      holder.viewCountView.setText("clicked"); 
     } 
    }); 
    return convertView; 
+0

당신이 시도한, 오류가 "다른 메서드에서 정의 된 내부 클래스 내부에 최종 변수 variableName을 참조 할 수 없습니다" – dmnlk

관련 문제