To nie jest odpowiedź na zapytanie, ale lepszy sposób na obsłużenie tego scenariusza.
Użyj metod wywołania zwrotnego.
W swojej działalności:
To będzie implementować interfejs, które mamy w naszej Adapter
. W tym przykładzie zostanie wywołany, gdy użytkownik kliknie element w polu RecyclerView
.
public class MyActivity extends Activity implements AdapterCallback {
private MyAdapter mMyAdapter;
@Override
public void onMethodCallback() {
// Show your alert
}
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.mMyAdapter = new MyAdapter(this);
}
}
W adaptera:
w działalności, rozpoczęliśmy naszą Adapter
i podał to jako argument do konstruktora. To zainicjuje nasz interfejs dla naszej metody wywołania zwrotnego. Widzimy, że używamy naszej metody wywołania zwrotnego dla kliknięć użytkowników.
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private AdapterCallback mAdapterCallback;
public MyAdapter(Context context) {
try {
this.mAdapterCallback = ((AdapterCallback) context);
} catch (ClassCastException e) {
throw new ClassCastException("Activity must implement AdapterCallback.");
}
}
@Override
public void onBindViewHolder(final MyAdapter.ViewHolder viewHolder, final int i) {
// simple example, call interface here
// not complete
viewHolder.itemView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try {
mAdapterCallback.onMethodCallback();
} catch (ClassCastException exception) {
// do something
}
}
});
}
public static interface AdapterCallback {
void onMethodCallback();
}
}
uprzejmości:Call Activity method from adapter
Sprawdź jeśli identyfikator użytkownika 'custom_dialog',', 'image' text' i' dialogButtonOK' są poprawnie napisane –
Tak, to pokazuje nullpointer i wskazuje na to jako problem: final Dialog dialog = new Dialog (context); –
gdzie jest twoja inicjalizacja kontekstu.? – Emil