Я хотел бы знать, как реализовать OnClick для каждого элемента в моей сетке (с использованием Recycler и вид карты), чтобы начать новый activity.Below мой класс ViewHolder и RecyclerView адаптер КлассРеализация OnClick в Recyclerview адаптер
Это мой RecyclerView адаптер класса
import android.app.Activity; import android.content.Context; import android.content.Intent; import android.nfc.Tag; import android.nfc.TagLostException; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Toast; import java.util.List; public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewHolders> { private List<ItemObject> itemList; private Context context; public RecyclerViewAdapter(Context context, List<ItemObject> itemList) { this.itemList = itemList; this.context = context; } @Override public RecyclerViewHolders onCreateViewHolder(ViewGroup parent, int viewType) { View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view_list, null); RecyclerViewHolders rcv = new RecyclerViewHolders(layoutView); return rcv; } @Override public void onBindViewHolder(RecyclerViewHolders holder, final int position) { holder.countryName.setText(itemList.get(position).getName()); holder.countryPhoto.setImageResource(itemList.get(position).getPhoto()); holder.countryPhoto.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(view.getContext(),"This is Maps",Toast.LENGTH_SHORT).show(); } }); } @Override public int getItemCount() { return this.itemList.size(); } } //This is my Recycler View Holder Class import android.content.Intent; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.View; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; public class RecyclerViewHolders extends RecyclerView.ViewHolder implements View.OnClickListener { public TextView countryName; public ImageView countryPhoto; public RecyclerViewHolders(View itemView) { super(itemView); itemView.setOnClickListener(this); countryName = (TextView) itemView.findViewById(R.id.country_name); countryPhoto = (ImageView) itemView.findViewById(R.id.country_photo); } @Override public void onClick(View view) { Toast.makeText(view.getContext(), "Clicked Country Position = " + getPosition(), Toast.LENGTH_SHORT).show(); } }
ответ
Я использую интерфейс как Callba ck для обработки этого случая.
Во-первых, я создаю класс интерфейса внутри адаптера.
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewHolders> {
private List<ItemObject> itemList;
private Context context;
private ItemClickListener mItemClickListener;
public RecyclerViewAdapter(Context context, List<ItemObject> itemList) {
this.itemList = itemList;
this.context = context;
}
@Override
public RecyclerViewHolders onCreateViewHolder(ViewGroup parent, int viewType) {
View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view_list, null);
RecyclerViewHolders rcv = new RecyclerViewHolders(layoutView);
return rcv;
}
public void addItemClickListener(ItemClickListener listener) {
mItemClickListener = listener;
}
@Override
public void onBindViewHolder(RecyclerViewHolders holder, final int position) {
holder.countryName.setText(itemList.get(position).getName());
holder.countryPhoto.setImageResource(itemList.get(position).getPhoto());
holder.countryPhoto.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mItemClickListener != null) {
mItemClickListener.onItemClick(position);
}
}
});
}
@Override
public int getItemCount() {
return this.itemList.size();
}
//Define your Interface method here
public interface ItemClickListener {
void onItemClick(int position);
}
}
Затем давайте сделаем операцию или фрагмент реализуем этот интерфейс и добавим слушателя.
public class MyFragment extends Fragment
implements RecyclerViewAdapter.ItemClickListener {
private List<ItemObject> mItemList;
...
@Override
public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
final Bundle savedInstanceState) {
...
//Make sure mItemList not NULL
RecyclerViewAdapter adapter = new RecyclerViewAdapter(getContext(), mItemList);
//Add Item Click listener
adapter.addItemClickListener(this);
}
@Override
public void onItemClick(int position) {
Toast.makeText(.getContext(),"Click on item: " + position,Toast.LENGTH_SHORT).show();
}
}
Надеюсь, это поможет!
Спасибо за ответы .. Да, они будут работать для меня – Xcoder
@Xcoder :) С удовольствием узнаем, что поможет –
ваш код выглядеть хорошо, если с просьбой о том, как создающих намерение открыть новый вид деятельности здесь подогреть вы должны изменить
это ленивый способ не рекомендуется для лучшего pratice
сделать статическую переменную в вашем Миане activty ведьма провести refrance некоторых вещи, как этот
public class MainActivity extends AppCompatActivity
public static Activity activity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setElevation(0);
activity=this;
}
}
, а затем внутри ваших мыши
...
@Override
public void onClick(View v) {
Toast.makeText(.getContext(),"Click on item: " + position,Toast.LENGTH_SHORT).show();
startActivity(new Intent(MainActivity.activity, MyOtherActivity.class));
}
...
Я не совсем ясно из вашего первоначального поста, что ваш вопрос, но если все, что вы хотите сделать, это реализовать OnClickListener в вашем RecyclerViewAdapter
, просто добавьте следующее:
во-первых, изменить объявление класса к этому:
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewHolders> implements OnClickListener {
Затем добавьте свой метод OnClick в классе, чтобы завершить интерфейс.
@Override
public void onClick(View view) {
Toast.makeText(this.getContext(),"Code to change activity goes here." ,Toast.LENGTH_SHORT).show();
}
Наконец, вам необходимо установить OnClickListener в свой класс адаптера.
@Override
public void onBindViewHolder(RecyclerViewHolders holder, final int position) {
holder.setOnClickListener(this);
holder.countryName.setText(itemList.get(position).getName());
holder.countryPhoto.setImageResource(itemList.get(position).getPhoto());
holder.countryPhoto.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mItemClickListener != null) {
mItemClickListener.onItemClick(position);
}
}
});
}
Теперь, лично я не стал бы так поступать. Что я хотел бы сделать вместо этого добавить частный внутренний класс адаптера, например:
private AdapterOnClickListener implements OnClickListener() {
private String message;
public AdapterOnClickListener (String toast) {
message = toast;
}
public void onClick (View v) {
Toast.makeText(this.getContext(),toast ,Toast.LENGTH_SHORT).show();
}
}
Затем адаптер вы звоните:
@Override
public void onBindViewHolder(RecyclerViewHolders holder, final int position) {
holder.setOnClickListener(new AdapterOnClickListener ("Instead of a string, I can be an intent. Then in your listener, you can call (If I recall correctly) getContext().startActivity(intent), and have an activity.");
holder.countryName.setText(itemList.get(position).getName());
holder.countryPhoto.setImageResource(itemList.get(position).getPhoto());
holder.countryPhoto.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mItemClickListener != null) {
mItemClickListener.onItemClick(position);
}
}
});
}
- 1. Проблемы с RecyclerView адаптер
- 2. Намерение и startactivity не работают на OnClick() в recyclerview адаптер
- 3. RecyclerVIew адаптер - передача значений в адаптер - onClickListener
- 4. RecyclerView Не подключен адаптер
- 5. Адаптер RecyclerView: почему метод onLongClick конфликтует с onClick?
- 6. RecyclerView: адаптер не подключен
- 7. Адаптер RecyclerView: OnBindViewHolder
- 8. Как настроить адаптер recyclerView?
- 9. уведомлять адаптер RecyclerView от фрагмента
- 10. Внедрить курсор в адаптер recyclerview
- 11. Адаптер RecyclerView в модульном тесте
- 12. Реализация RecyclerView
- 13. RecyclerView адаптер notifyDataSetChanges() не освежающий recyclerview
- 14. RecyclerView адептер OnClick проблема
- 15. RecyclerView onClick работает неправильно?
- 16. Реализация Sticky Navbar в RecyclerView
- 17. Адаптер RecyclerView, принимающий неправильные значения
- 18. Бесконечный адаптер onclick event
- 19. Адаптер заголовка заголовка для Recyclerview
- 20. Как настроить адаптер recyclerView асинхронно
- 21. не может решить адаптер RecyclerView
- 22. RecyclerView адаптер notifyDataSetChanged не работает
- 23. RecyclerView адаптер показывает неправильные изображения
- 24. Android почему Адаптер RecyclerView разбился?
- 25. Универсальный адаптер RecyclerView с DataBinding
- 26. Адаптер RecyclerView notifyDataSetChanged не работает
- 27. Расширяемый адаптер RecyclerView не устанавливается
- 28. Android RecyclerView: адаптер не подключен; пропуская макет
- 29. Firebase UI RecyclerView onClick
- 30. RecyclerView OnClick не работает
В чем проблема? – Enzokie
Почему вы добавили прослушиватель кликов в поле зрения владельца? –