2015-01-19 2 views
2

RecyclerView에 대한 클릭 한 항목의 위치를 ​​얻으려고합니다. 그러나, 그것은 조금 이상한되고 나만 클릭하면 위치를 기록하고 내게 Toast 위치하게 내버려 두지 않습니다. 여기를 참조하십시오 :RecyclerView OnClick 위치

public class MainAdapter extends RecyclerView.Adapter<MainAdapter.ViewHolder>{ 

private List<Country> countries; 
private int rowLayout; 
private Context mContext; 



public MainAdapter(List<Country> countries, int rowLayout, Context context) { 
    this.countries = countries; 
    this.rowLayout = rowLayout; 
    this.mContext = context; 
} 

public static class ViewHolder extends RecyclerView.ViewHolder{ 
    public TextView countryName; 


    public ViewHolder(View itemView) { 
     super(itemView); 
     countryName = (TextView) itemView.findViewById(R.id.countryName); 

     itemView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Log.d("RecyclerView", "onClick:" + getPosition()); 
       //Toast.makeText(v.getContext(),getPosition(), Toast.LENGTH_LONG).show(); 
      } 
     }); 

    } 


} 


@Override 
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
    View v = LayoutInflater.from(viewGroup.getContext()).inflate(rowLayout, viewGroup, false); 
    return new ViewHolder(v); 

} 


@Override 
public void onBindViewHolder(ViewHolder viewHolder, final int position) { 
    Country country = countries.get(position); 
    viewHolder.countryName.setText(country.name); 
} 


@Override 
public int getItemCount() { 
    return countries == null ? 0 : countries.size(); 
} 
} 

항목을 클릭 할 때 나는 위치의 Toast 주석을 제거하면 응용 프로그램이 충돌하지만, 로그가 잘 작동하는 것 같다. 클릭하면 항목의 위치를 ​​Toast 할 수 있도록 어떻게 수정할 수 있습니까?

+0

을 사용할 수 있습니다, 우리는 볼 필요가 당신이 얻고있는 오류 메시지는 무엇입니까. 질문을 수정하여 추가하십시오. –

답변

2

확실한 오류 메시지가 표시되어야하지만 이는 잘못된 인수를 Toast에 전달했기 때문일 수 있습니다.

Toast.makeText(v.getContext(), getPosition(), Toast.LENGTH_LONG).show(); 

getPositionint을 반환하고 makeText() 방법은 두 번째 매개 변수에 대한 String을 기대하고있다 :

귀하의 Toast는 다음과 같습니다.

Toast이로 변경

:

Toast.makeText(v.getContext(), "Position: " + getPosition(), Toast.LENGTH_LONG).show(); 

업데이트 : 우리가 당신을 도울 수 있으려면

getPosition 지금은 사용되지 않습니다, 당신은 getLayoutPosition

+0

감사합니다. 그것은 훨씬 더 의미가 있습니다. – user3358306

+1

FYI, Toast.makeText의 두 번째 매개 변수에 정수를 추가하는 것은 위험합니다. 정수를 일부 문자열의 리소스 ID로 처리하므로 앱을 빌드하지 못할 수 있습니다. 당신은 그 사실을 알고 있어야합니다. –