2016-07-20 13 views
0

RecyclerView에 대한 각 행에서 텍스트를 클릭 할 때마다 텍스트를 입력하려고했지만 컨텍스트 오류가 발생합니다. 나는 초급 프로그래머이기 때문에 무엇을해야할지 모르겠습니다. 미리 감사드립니다. 또한 각 행에 모두가 볼 수있는 메시징 그룹 채팅이 있고 각 사용자는 그들이 선택한 제목을 가진 행을 추가 할 수있는 앱을 만들려고합니다. 누군가가 저를 도울 수 있다면, 그것은 굉장 할 것입니다! 그리고 아주 초보자이기 때문에 매우 감사하겠습니다. 고맙습니다!RecyclerView 용 어댑터의 컨텍스트 오류

내가 받고있는 오류는 컨텍스트라고하는 내 토스트가있는 곳에서 발생합니다.

Adaper 코드 :

package com.example.patri.index01; 

import android.content.Context; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 
import java.util.Collections; 
import java.util.List; 

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { 
private LayoutInflater inflater; 
List<Information> data= Collections.emptyList(); 

public MyAdapter(Context context, List<Information> data){ 
    inflater=LayoutInflater.from(context); 
    this.data=data; 

} 
@Override 
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

    View view=inflater.inflate(R.layout.custom_row, parent,false); 
    MyViewHolder holder=new MyViewHolder(view); 
    return holder; 
} 

@Override 
public void onBindViewHolder(MyViewHolder holder, final int position) { 

    Information current=data.get(position); 

    holder.title.setText(current.title); 
    holder.icon.setImageResource(current.iconId); 

    holder.title.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Toast.makeText(context, "Item clicked at " +position, Toast.LENGTH_SHORT) 
     } 
    }); 


} 

@Override 
public int getItemCount() { 
    return data.size(); 
} 

class MyViewHolder extends RecyclerView.ViewHolder{ 
    TextView title; 

    ImageView icon; 

    public MyViewHolder(View itemView) { 

     super(itemView); 

     title= (TextView)itemView.findViewById(R.id.listText); 

     icon= (ImageView) itemView.findViewById(R.id.listIcon); 

    } 
} 
} 

정보 클래스 :

public class Information { 

int iconId; 

String title; 

} 
+0

가 아직' –

답변

1

contextMyAdapter 클래스 생성자에 전달되는 액세스 할 수 없습니다 onClick 내부 방법이기 때문에 문제가 점점 Toast.makeText(v.getContext(), "Item clicked at " + position, Toast.LENGTH_SHORT).show();에 .

v.getContext() 방법을 사용 onClick에서 :

Toast.makeText(v.getContext(), "Item clicked at " +position, Toast.LENGTH_SHORT) 

또는

는 생성자에서 그것을 MyAdapter 클래스 context를 선언하고 초기화 :

Context context; 
public MyAdapter(Context context, List<Information> data){ 
    this.context=context; 
    inflater=LayoutInflater.from(context); 
    this.data=data; 

} 
+0

텍스트 대신 전체 행을 클릭하는 방법을 알고 있습니까? –

+0

@PatrickJ .: TextView 대신 전체 레이아웃을 클릭 할 수있게 한 다음 레이아웃에'setOnClickListener'를 추가하십시오 –

+0

정보 클래스를 사용하면 어떻게됩니까? 그것을 정의해야합니까? 나는 편집을 추가 할 것이다 @ ρяσѕρєя K –

0

변경 Toast.makeText(context, "Item clicked at " +position, Toast.LENGTH_SHORT)

+0

을 context'를 초기화하지 않은 수 전체 행을 클릭하면 축배가 표시 될 때 그렇게하십시오? –

+0

예. 'onClick' 콜백 안에는 가변적 인 문맥이 없으므로 그것을 얻고보기 만하면됩니다. 그래서 우리는 'v.getContext()'를 씁니다. 또한 토스트를 보여주기 위해서'show()'를 호출해야합니다. –

관련 문제