2017-12-13 1 views
0

일부 행이있는 ListView을 만들었습니다. ItemClickListener에서 나는 행의 항목이 ListView에서 행에 대한 특정 항목 가져 오기

lstcontact.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      String v=lstcontact.getItemAtPosition(position).toString(); 
      if(view.getId()==R.id.btncall) { 
       Toast.makeText(MainActivity.this, "Make A Call at " + position, Toast.LENGTH_SHORT).show(); 
      }else if(view.getId()==R.id.btnmess) { 
       Toast.makeText(MainActivity.this, "Make A Message at " + position, Toast.LENGTH_SHORT).show(); 
      } 
     } 


    }); 

내가 버튼이 항목에 대한 onclick을 호출하지 않는

+2

가능한 중복 : 당신의 레이아웃/어댑터 코드를 볼 수 좋았을 것이지만, 기본 사용자 정의 어댑터 (효율성의 ViewHolder 패턴을 사용하여)이 같은 것을 볼 수 있었다 ListView에서 행의 단일 항목을 얻는 방법?] (https://stackoverflow.com/questions/11145920/android-how-to-single-item-of-a-row-in-listview) –

+1

을 제공하십시오. 귀하의 어댑터 코드 –

답변

0

을 사용자가 메시지를 클릭 할 때 축배를 표시하거나 호출 할 클릭하는 액세스 할 그 행에. 이렇게하려면 어댑터에 대한 리스너를 구현해야합니다.

public interface CustomListener{ 
    void onSomeItemClick(View view); 
} 

어댑터 생성자에서이 수신기를 초기화해야합니다. 당신은 당신이 onSomeItemClick 방법을에서

@Override 
public void someItemClick(View view){ 
    if(view.getId()==R.id.btncall) { 
     Toast.makeText(MainActivity.this, "MAke A Call at "+position, Toast.LENGTH_SHORT).show(); 
    }else if(view.getId()==R.id.btnmess) { 
     Toast.makeText(MainActivity.this, "MAke A Message at "+position, Toast.LENGTH_SHORT).show(); 
    } 
} 

를 오버라이드 (override) 할 필요가 그 후 청취자에게

adapter = new YourAdapter(this,this,list); 

을 구현하기 위해 필요한이 어댑터를 만들 활동

public YourAdapter(Context context, CustomListener listener, List<YourClass> list){ 
    this.context = context; 
    this.listener = listener; 
    this.list = list; 
} 

어댑터의 당신이 onClickListener를 구현해야 getView() 어떤보기에서 당신은 클릭하고 싶습니다.

view.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     if(listener!=null{ 
      listener.onSomeItemClick(v); 
     }  
    } 
}); 
0

onItemClick의 뷰 매개 변수 (모든 버튼과 내부 모두 포함) 전체의 ListView 행 view.getId 그래서() == R.id.btncall이 이해하지 않을 것이다.

사용자 지정 어댑터에있는 단추의 onClickListener에서 토스트를 설정하는 것이 가장 좋습니다. ,

public class MyListAdapter extends ArrayAdapter<YourItemType> { 

static class ViewHolder { 
    private Button callButton; 
    private Button messageButton; 
    // declare any other views you want to control here 
} 


public MyListAdapter(Context context, List<YourItemType> items) { 
    super(context,0,items); 
} 

@NonNull 
@Override 
public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) { 
    ViewHolder holder; 
    if (convertView == null) { 
     LayoutInflater inflater = (LayoutInflater) getContext() 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(R.layout.your_listview_layout, null); 
     holder = new ViewHolder(); 
     holder.callButton = (Button) convertView.findViewById(R.id.btncall); 
     holder.messageButton = (Button) convertView.findViewById(R.id.btnmess); 
     // find views for any other views in your ViewHolder/Listview layout 
     convertView.setTag(holder); 
    } 
    else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 
    YourItemType item = getItem(position); 
    holder.callButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      // simple say what position is 
      Toast.makeText(getContext(), "Make A Call at "+String.valueOf(position), Toast.LENGTH_SHORT).show(); 
      // do something with the item itself 
      Toast.makeText(getContext(), "This toast is for info on the item, which is "+ item.toString(), Toast.LENGTH_SHORT).show(); 

     } 
    }); 
    holder.messageButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      // simple say what position is 
      Toast.makeText(getContext(), "Make A Call at "+String.valueOf(position), Toast.LENGTH_SHORT).show(); 
      // do something with the item itself 
      Toast.makeText(getContext(), "This toast is for info on the item, which is "+ item.toString(), Toast.LENGTH_SHORT).show(); 
     } 
    }); 
    return convertView; 
} 

} [안드로이드의

관련 문제