농장/Android

ViewHolder class에서 Toast 띄우기, 안됨 해결하기 / Android Java

귤발자 2020. 10. 26. 20:01
728x90
반응형
Toast.makeText(context, String, int).show();

 

 첫번째 context가 제대로 먹지 않는 경우가 많다. 다른 Activity 클래스에선 getApplicationContext()나 this 등이 먹는데 이상하게 ViewHolder 클래스에선 되지 않더라. 이 클래스도 Activity 클래스 하위에 위치하는데.

 

 

해결 방법 두가지를 설명하겠다.

 

 

 

1)

 

이 토스트가 사용되는 줄은 정확히 ViewHolder 안의 setOnClickListener 메서드에 위치한다.

public class ViewHolder extends RecyclerView.ViewHolder{
    private TextView title, date;
        public ViewHolder(@NonNull final View itemView){
            super(itemView);
            title = itemView.findViewById(R.id.listtitle);
            date = itemView.findViewById(R.id.listdate);
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    int pos = getAdapterPosition();
                    if(pos != RecyclerView.NO_POSITION){
                        Toast.makeText(view.getContext(), "pos", Toast.LENGTH_SHORT).show();
                    }
                }
        });
    }
}​

 

 

이 메서드는 매개변수로 view를 갖는다. 때문에 다른 액티비티에서와 사용해야하는 Toast의 context객체가 다른것이다. view 인자로부터 context를 가져와야 한다.

 

view.getContext() 메서드를 사용해야 작동한다.

 

 

 

 

2)

Toast가 띄워질 xml와 연결된 Activity에서 context를 static 변수로 담아둔 후,

public static Context mContext;
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_viewnote);
        mContext = this;
        ..//이하생략

 

이 Context를 사용한다.

Toast.makeText(viewmemoActivity.mContext, "pos", Toast.LENGTH_SHORT).show();
728x90
반응형