Android RecycleReview OnCLick侦听器
android recyclerView适配器出错。当点击RecyclerView项目时,应用程序将停止工作。我想在单击任何项目时转到其他活动,当我使用Toast时,它工作正常,但如果我添加了意图,则它停止工作 这是我的界面:Android RecycleReview OnCLick侦听器,android,android-recyclerview,onclicklistener,Android,Android Recyclerview,Onclicklistener,android recyclerView适配器出错。当点击RecyclerView项目时,应用程序将停止工作。我想在单击任何项目时转到其他活动,当我使用Toast时,它工作正常,但如果我添加了意图,则它停止工作 这是我的界面: public interface OnItemClickListener { void onClick(View view, int position); } 这是我的回收器适配器校准: public class RecAdapter extends R
public interface OnItemClickListener {
void onClick(View view, int position);
}
这是我的回收器适配器校准:
public class RecAdapter extends RecyclerView.Adapter<RecAdapter.MyViewHolder> {
private List<Items> items;
private Context context;
public RecAdapter(List<Items> items, Context context )
{
this.items = items;
this.context = context;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_item,parent,false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.countryname.setText(items.get(position).getCountryname());
holder.rank.setText(items.get(position).getRank());
Picasso.with(context)
.load(items.get(position).getFlag())
.into(holder.flag);
holder.setClickListener(new OnItemClickListener() {
@Override
public void onClick(View view, int position) {
Intent intent = new Intent(context , Main2Activity.class);
context.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return items.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView countryname, rank;
ImageView flag;
private OnItemClickListener clickListener;
public MyViewHolder(View itemView) {
super(itemView);
countryname = (TextView) itemView.findViewById(R.id.capital);
rank = (TextView) itemView.findViewById(R.id.rank);
flag = (ImageView) itemView.findViewById(R.id.flag);
itemView.setTag(itemView);
itemView.setOnClickListener(this);
}
public void setClickListener(OnItemClickListener itemClickListener) {
this.clickListener = itemClickListener;
}
@Override
public void onClick(View view) {
if (clickListener != null) clickListener.onClick(view, getAdapterPosition());
}
}
}
公共类RecAdapter扩展了RecyclerView.Adapter{
私人清单项目;
私人语境;
公共重新适配器(列表项、上下文)
{
这个项目=项目;
this.context=上下文;
}
@凌驾
公共MyViewHolder onCreateViewHolder(视图组父级,int-viewType){
View=LayoutFlater.from(parent.getContext()).flate(R.layout.row\u项,parent,false);
返回新的MyViewHolder(视图);
}
@凌驾
公共无效onBindViewHolder(MyViewHolder,int位置){
holder.countryname.setText(items.get(position.getCountryname());
holder.rank.setText(items.get(position.getRank());
毕加索。与(上下文)
.load(items.get(position.getFlag())
.进入(持有人旗帜);
holder.setClickListener(新的OnItemClickListener(){
@凌驾
公共void onClick(视图,int位置){
意向意向=新意向(上下文,Main2Activity.class);
背景。开始触觉(意图);
}
});
}
@凌驾
public int getItemCount(){
返回items.size();
}
公共类MyViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{
TextView国家名称、等级;
图像视图标志;
私有侦听器clickListener;
公共MyViewHolder(查看项目视图){
超级(项目视图);
countryname=(TextView)itemView.findViewById(R.id.capital);
rank=(TextView)itemView.findViewById(R.id.rank);
flag=(ImageView)itemView.findViewById(R.id.flag);
setTag(itemView);
setOnClickListener(这个);
}
public void setClickListener(OnItemClickListener项ClickListener){
this.clickListener=itemClickListener;
}
@凌驾
公共void onClick(视图){
如果(clickListener!=null)clickListener.onClick(view,getAdapterPosition());
}
}
}
您不能直接单击支架。。。。。为视图提供一个id,然后按如下方式重新编写代码:
holder.(someitem).setClickListener(new OnItemClickListener() {//you need a view to execute the onclicklistener
@Override
public void onClick(View view, int position) {
Intent intent = new Intent(context , Main2Activity.class);
context.startActivity(intent);
}
});
从另一个问题复制我的答案: 如您所知,此方法在
RecyclerView
类中不再可用
我在RecyclerView
中实现onClick
事件的方法如下:
class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {
interface OnClickListener {
void onClick(Item item);
}
private final List<Item> dataset;
private final OnClickListener l;
public MyAdapter(List<Item> data, OnClickListener listener) {
this.dataset = data;
this.l = listener;
}
@Override MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = //inflate layout
MyClick click = new MyClick() {
onClick(int position) {
if (l != null) {
l.onClick(dataset.get(position));
}
}
};
return new MyViewHolder(click, v);
}
static class MyViewHolder {
final MyClick l;
public MyViewHolder(MyClick listener, View view) {
super(view);
l = listener;
// inflate views
view.setOnClickListener(new OnClickListener() {
if (l != null) {
l.onClick(getAdapterPosition());
}
});
}
interface MyClick {
void onClick(int position);
}
}
}
class MyActivity extends AppCompatActivity {
@Override void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// set layout
MyAdapter adapter = new MyAdapter(getData(), new OnClickListener() {
@Override onClick(Item item) {
// do stuff with item
}
});
}
}
类MyAdapter扩展了RecyclerView.Adapter{
接口OnClickListener{
单击(项目)后作废;
}
私人最终清单数据集;
私人最终单选;
公共MyAdapter(列表数据,OnClickListener侦听器){
this.dataset=数据;
this.l=侦听器;
}
@重写MyViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图v=//充气布局
MyClick=新建MyClick(){
onClick(int位置){
如果(l!=null){
l、 onClick(dataset.get(position));
}
}
};
返回新的MyViewHolder(单击,v);
}
静态类MyViewHolder{
最终MYL;
公共MyViewHolder(MyClick侦听器,视图){
超级(视图);
l=听者;
//夸大观点
view.setOnClickListener(新的OnClickListener(){
如果(l!=null){
l、 onClick(getAdapterPosition());
}
});
}
界面MyClick{
void onClick(内部位置);
}
}
}
类MyActivity扩展了AppCompatActivity{
@在创建时覆盖void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//集合布局
MyAdapter=新的MyAdapter(getData(),new OnClickListener()){
@覆盖onClick(项){
//处理物品
}
});
}
}
添加单击侦听器,如下所示:-
View itemView;
Context context;
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.card_view, parent, false);
this.context=parent.getContext();
return new ViewHolder(itemView);
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context , Main2Activity.class);
context.startActivity(intent);
}
});
}
下面是我为回收项目单击创建的单击侦听器的代码 使用此选项,您将获得两种类型的单击
public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
public interface OnItemClickListener
{
void onItemClick(View view, int position);
void onItemLongClick(View view, int position);
}
private OnItemClickListener mListener;
private GestureDetector mGestureDetector;
public RecyclerItemClickListener(Context context, final RecyclerView recyclerView, OnItemClickListener listener)
{
mListener = listener;
mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener()
{
@Override
public boolean onSingleTapUp(MotionEvent e)
{
return true;
}
@Override
public void onLongPress(MotionEvent e)
{
View childView = recyclerView.findChildViewUnder(e.getX(), e.getY());
if(childView != null && mListener != null)
{
mListener.onItemLongClick(childView, recyclerView.getChildPosition(childView));
}
}
});
}
@Override
public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e)
{
View childView = view.findChildViewUnder(e.getX(), e.getY());
if(childView != null && mListener != null && mGestureDetector.onTouchEvent(e))
{
mListener.onItemClick(childView, view.getChildPosition(childView));
}
return false;
}
@Override
public void onTouchEvent(RecyclerView view, MotionEvent motionEvent){}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
}
如何在活动和片段中使用
rvcyclerView.addOnItemTouchListener(new RecyclerItemClickListener(context, rvcyclerView,
new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
//do you what you want tot do simple click
}
@Override
public void onItemLongClick(View view, int position) {
//do you what you want tot do on long click
}
}));
}
android recyclerView Adpter类上的错误
什么错误?这是因为上下文
是空的
…而且,onBindViewHolder
还有一个完全不同的责任,而不是你在那里试图完成的。格式化代码。
public class RecAdapter extends RecyclerView.Adapter<RecAdapter.MyViewHolder> implements View.OnClickListener {
private List<Items> items;
private Context context;
private OnItemClickListener clickListener;
public RecAdapter(List<Items> items, Context context )
{
this.items = items;
this.context = context;
}
public void setClickListener(OnItemClickListener itemClickListener) {
this.clickListener = itemClickListener;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_item,parent,false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.countryname.setText(items.get(position).getCountryname());
holder.rank.setText(items.get(position).getRank());
Picasso.with(context)
.load(items.get(position).getFlag())
.into(holder.flag);
holder.flag.setOnClickListener(this);
}
@Override
public int getItemCount() {
return items.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
TextView countryname, rank;
ImageView flag;
public MyViewHolder(View itemView) {
super(itemView);
countryname = (TextView) itemView.findViewById(R.id.capital);
rank = (TextView) itemView.findViewById(R.id.rank);
flag = (ImageView) itemView.findViewById(R.id.flag);
}
@Override
public void onClick(View view) {
if (clickListener != null) clickListener.onClick(view, getAdapterPosition());
}
}
}
public class MainActivity extends AppCompatActivity implements OnItemClickListener{
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayoutManager layout = new
LinearLayoutManager(getContext(),LinearLayoutManager.VERTICAL, false);
mRecyclerView.setLayoutManager(layout );
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
RecAdapter adapter = new RecAdapter(items ,getContext());
adapter.setClickListener(this);
mRecyclerView.setAdapter(adapter );
}
@Override
public void onClick(View view, int position) {
switch(view.getId()) {
}
}