ではどうしているかというと、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 件のコメント:
コメントを投稿