ではどうしているかというと、View がタップされたときに呼び出すメソッドを Adapter 内に定義しておき、Activity や Fragment で Adapter を生成するときにそのメソッドを Override してタップされたときの処理を記述するようにしています。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
final VersionAdapter adapter = new VersionAdapter() {
@Override
protected void onVersionClicked(@NonNull String version) {
super.onVersionClicked(version);
// Activity 側でタップされたときの処理を行う
Toast.makeText(MainActivity.this, version, Toast.LENGTH_SHORT).show();
}
};
recyclerView.setAdapter(adapter);
}
public static class VersionAdapter extends RecyclerView.Adapter<VersionViewHolder> {
// タップされたときに呼び出されるメソッドを定義
protected void onVersionClicked(@NonNull String version) {
}
private final List<String> versions = new ArrayList<>();
@Override
public VersionViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
final LayoutInflater inflater = LayoutInflater.from(parent.getContext());
final VersionViewHolder holder = VersionViewHolder.create(inflater, parent);
// onCreateViewHolder でリスナーをセット
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final int position = holder.getAdapterPosition();
final String version = versions.get(position);
onVersionClicked(version);
}
});
return holder;
}
...
}
}
完全なサンプルは
https://github.com/yanzm/RecyclerViewSample
にあります。
0 件のコメント:
コメントを投稿