1

사용자 지정 목록보기를 만들었습니다. 사용자가 image1을 클릭하면 activity1이 호출되고 사용자가 image2를 클릭 할 때 목록에 이미지 2 개 (왼쪽, 오른쪽)와 가운데에 텍스트가 있습니다. activity2가 호출되고 사용자가 텍스트를 클릭하면 activity3이 해당 위치에 대응하여 호출됩니다. 어느 누구도 내가 어떻게이 일을 할 수 있는지 말해 줄 수 있니?사용자 지정 목록보기에서 클릭 수신기를 구현하는 방법

 @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
    View view = convertView; 
    ViewHolder holder; 
    if (view == null) { 
     LayoutInflater inflater = (LayoutInflater) activity 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view = inflater.inflate(row, null); 


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

    if ((items == null) || ((position + 1) > items.size())) 
     return view; 

    objBean = items.get(position); 

    ImageView img = (ImageView)convertView.findViewById(R.id.contact_photo); 
    img.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      String phoneNumber = objBean.getPhoneNo(); 
      Intent intent = new Intent(Intent.ACTION_CALL, Uri 
        .parse(phoneNumber)); 
      con.startActivity(intent); 

     } 
    }); 


    holder.tvname = (TextView) view.findViewById(R.id.tvname); 
    holder.tvPhoneNo = (TextView) view.findViewById(R.id.tvphone); 

    if (holder.tvname != null && null != objBean.getName() 
      && objBean.getName().trim().length() > 0) { 
     holder.tvname.setText(Html.fromHtml(objBean.getName())); 
    } 
    if (holder.tvPhoneNo != null && null != objBean.getPhoneNo() 
      && objBean.getPhoneNo().trim().length() > 0) { 
     holder.tvPhoneNo.setText(Html.fromHtml(objBean.getPhoneNo())); 
    } 
    return view; 
} 

public class ViewHolder { 

    public TextView tvname, tvPhoneNo; 
} 

답변

1

getView 메소드에서 사용자 정의보기 구성 요소를 초기화 할 수 있으며 setOnClickLisner를 정의 할 수 있습니다.

1

당신은 당신의 어댑터의 getView 방법에 텍스트 뷰와 imageViews에 대한 OnClickListener를 구현해야합니다 : 모든

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    // CLICK LISTENERS 

} 
+0

내가 그랬지만 오류 – user3409263

+0

내 업데이트 된 코드를 확인하고이 코드에서 뭐가 잘못 됐는지 말해 줄래? – user3409263

0

먼저 이미지 뷰의 텍스트 모두가 당신의 XML true로 클릭 속성을 보는 설정합니다.

android:clickable="true" 

이제 각각의 활동을 시작하는 방법은 다양합니다.

1) 활동에 세 가지 다른 방법을 사용할 수 있으며 resp를 클릭하여 호출 할 수 있습니다. XML 자체에서보기. 그러나 이것을 수행하는 동안 단편을 사용하는 경우 활동에 해당 메소드를 작성해야합니다. 단편화를 주요 활동에 쓰십시오.

2) getView 메소드에서 3 개의 뷰 모두에 대해 Listener를 클릭하고 resp를 수행하십시오. 그것에있는 행동.

3) OnClickListener를 구현하고 ID에 따라 클릭 수신기를 관리 할 수 ​​있습니다. 이 당신을 도와

0
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    LayoutInflater inflater = LayoutInflater.from(context); 
      MyHolder holder; 
    if (convertView == null) { 
     convertView = inflater.inflate(R.layout.list_item_image, parent, false); 
      holder = new MyViewHolder(); 
      convertView.setTag(holder); 
    }else { 
      holder = (MyViewHolder)convertView.getTag(); 
      } 
    holder. b1 = (Button)convertView.findViewByID(R.id.b1); 
      holder. b2 = (Button)convertView.findViewByID(R.id.b2); 
      holder. tv = (TextView)convertView.findViewByID(R.id.tv); 

      b1.setOnClickListener(new OnClickListener() { 
        @Override 
     public void onClick(View arg0) { 
      //write intent to go to activity 1 
     } 
        }); 
       b2.setOnClickListener(new OnClickListener() { 
        @Override 
     public void onClick(View arg0) { 
      //write intent to go to activity 2 
     } 
        }); 
       tv.setOnClickListener(new OnClickListener() { 
        @Override 
     public void onClick(View arg0) { 
      //write intent to go to activity 3 
     } 
        }); 
    return convertView; 
} 




class MyViewHolder{ 
    public TextView tv; 
      public Button b1, b2; 
} 

희망 ....

0

는 또한 같은 문제를 가지고 나는 주위에 일을 얻기 위해 노력하고 있어요. 개인적으로 나는 목록보기의 안드로이드 API가 끔찍하다고 생각하며 사용하기 쉽고 구현하기 쉽도록 개선해야합니다. 나는 당신의 청취자에게 get view 메서드를 호출하는 것은 나쁜 생각으로 생각합니다. 성능상의 이유로 정확한보기를 돌려주는 안드로이드 시스템을 항상 신뢰할 수는 없습니다. 나는 목록보기의 개발자를 인용하고있다. View Holder 정적 클래스를 사용하면보기를 유지하고 빠르게 액세스 할 수 있지만 목록보기 항목의 특정 항목보기에 대한 이벤트 리스너를 처리하는 데 도움이되지 않으며 솔직히 인터넷이나 Google에서 합리적인 해결책을 찾지 못했습니다. 개발자 사이트.

내 머리를 건 드리며 끝없는 테스트를 마친 후 오케이 마침내 해결책이 있습니다. (가) setTagViewHolder 구현 만 다르게하는보기로 ViewHolder 정적 구현을 ​​돌려 내가 뭘 의미하는 것은 사용

static class ViewHolder extends View implements OnClickListener { 

    public ViewHolder(Context context) { 
     super(context); 
     // TODO Auto-generated constructor stub 
    } 

    ImageView bomb; 


    public void assignList(){ 
     if(bomb != null) 
     bomb.setOnClickListener(this); 
    } 

    public int position = -1; 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     Log.i("HOMEADAPTER", "OUR OWN STUFF"); 
    } 

} 

당신은 당신의 활동에 귀하의 모든 OnItemClickListener 을 구현하는 곳 완료되면 당신은 그렇게 설정 태그를 얻을 수있다.

 ViewHolder holder = (ViewHolder) view.getTag(); 

그리고 thats 모든 아기! 당신은 당신이해야 할 마지막 10 % 일을 90 % 완료했습니다. 당신이 얻은 견해로 무엇을하고 싶습니까?

+0

@AbrahamUribe는 답변이있는 업데이트를 확인합니다. –

관련 문제