Android fragments android-如何从Reyclerview中的项目启动活动?

Android fragments android-如何从Reyclerview中的项目启动活动?,android-fragments,android-intent,android-recyclerview,Android Fragments,Android Intent,Android Recyclerview,我正在尝试使用OnClick方法从recyclerview的项目启动活动。我制作了一个接口,并在适配器中使用了getAdapterPostion。但这项活动并未启动。这是我的密码: 我在适配器中创建的接口: public interface Clicklistener{ public void itemClicked(View view,int position); } } ClickListener的Setter方法: public void setclickListener(Cl

我正在尝试使用OnClick方法从recyclerview的项目启动活动。我制作了一个接口,并在适配器中使用了getAdapterPostion。但这项活动并未启动。这是我的密码:

我在适配器中创建的接口:

 public interface Clicklistener{
    public void itemClicked(View view,int position);
}
}

ClickListener的Setter方法:

public void setclickListener(Clicklistener clickListener){

this.clickListener = clickListener;
}
public   class ViewHolderListMovies extends RecyclerView.ViewHolder implements View.OnClickListener {

    private ImageView movieThumbnail;
    private TextView movieTitle;
    private TextView movieYear;





public ViewHolderListMovies(View itemView) {
            super(itemView);
            itemView.setOnClickListener(this);
            movieThumbnail = (ImageView) itemView.findViewById(R.id.video_poster);
            movieTitle = (TextView) itemView.findViewById(R.id.video_name);
            movieYear = (TextView) itemView.findViewById(R.id.video_year);

        }


        @Override
        public void onClick(View v) {
            if(clickListener!=null){
                clickListener.itemClicked(v,getAdapterPosition());

            }

        }
我在其中设置OnClickListener的View Holder方法:

public void setclickListener(Clicklistener clickListener){

this.clickListener = clickListener;
}
public   class ViewHolderListMovies extends RecyclerView.ViewHolder implements View.OnClickListener {

    private ImageView movieThumbnail;
    private TextView movieTitle;
    private TextView movieYear;





public ViewHolderListMovies(View itemView) {
            super(itemView);
            itemView.setOnClickListener(this);
            movieThumbnail = (ImageView) itemView.findViewById(R.id.video_poster);
            movieTitle = (TextView) itemView.findViewById(R.id.video_name);
            movieYear = (TextView) itemView.findViewById(R.id.video_year);

        }


        @Override
        public void onClick(View v) {
            if(clickListener!=null){
                clickListener.itemClicked(v,getAdapterPosition());

            }

        }
我在片段中初始化了接口:

listMoviesAdapter.setclickListener(this);
最后,我在片段中开始了调用所需活动的意图:

 @Override
public void itemClicked(View view, int position) {
    startActivity(new Intent(getActivity(),MovieDetailsActivity.class));

}

感谢您的帮助。谢谢

在方法onBindViewHolder中初始化setoncliklistener。举个例子,也许会有帮助

public class HistoryAdapter extends RecyclerView.Adapter<HistoryAdapter.ViewHolder> {

private Context mContext;
private List<String> mDataSet;
private List<String> mIdevent;


public HistoryAdapter(Context context, List<String> dataSet, List<String> idevent, List<String> askPrice, 
        List<String> bidPrice, List<String> Profit) {

    mContext = context;
    mDataSet = dataSet;
    mIdevent = idevent;

}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {      

    View v = LayoutInflater.from(mContext)
            .inflate(R.layout.layout_list_history, parent, false);
    return new ViewHolder(v);

}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    Picasso.with(mContext).load(R.drawable.add2new).into(holder.image);
    holder.text.setText(mDataSet.get(position));


    holder.setClickListener(new HistoryAdapter.ViewHolder.ClickListener() {
        public void onClick(View v, int pos, boolean isLongClick) {
            if (isLongClick) {

                // View v at position pos is long-clicked.
                String poslx = pos + "";
                String menax = mDataSet.get(pos);
                Toast.makeText(mContext, "longclick pos. " + poslx + " pair " + menax, Toast.LENGTH_SHORT).show();

            } else {
                // View v at position pos is clicked.
                //String possx = pos + "";
                String poslx = pos + "";
                String event2 = mDataSet.get(pos); 
                String id2 = mIdevent.get(pos);
                Toast.makeText(mContext, "shortclick pos. " + poslx + " pair " + event2, Toast.LENGTH_SHORT).show();
                //toggleSelection(pos);

                Intent i = new Intent(mContext, HistoryCandlesActivity.class);
                Bundle extras = new Bundle();
                extras.putString("eventx", event2);
                extras.putString("idx", id2);
                extras.putInt("whatspage", 0);
                i.putExtras(extras);
                v.getContext().startActivity(i);


            }
        }
    });

}



@Override
public int getItemCount() {
    return mDataSet.size();
}

public void remove(int position) {
    mDataSet.remove(position);
    notifyItemRemoved(position);
}

public void add(String text, int position) {
    mDataSet.add(position, text);
    notifyItemInserted(position);
}

static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {

    public ImageView image;
    public TextView text;
    private ClickListener clickListener;

    public ViewHolder(View itemView) {
        super(itemView);
        image = (ImageView) itemView.findViewById(R.id.image);
        text = (TextView) itemView.findViewById(R.id.text);

        // We set listeners to the whole item view, but we could also
        // specify listeners for the title or the icon.
        itemView.setOnClickListener(this);
        itemView.setOnLongClickListener(this);

    }


    /* Interface for handling clicks - both normal and long ones. */
    public interface ClickListener {

        /**
         * Called when the view is clicked.
         *
         * @param v view that is clicked
         * @param position of the clicked item
         * @param isLongClick true if long click, false otherwise
         */
        public void onClick(View v, int position, boolean isLongClick);

    }

    /* Setter for listener. */
    public void setClickListener(ClickListener clickListener) {
        this.clickListener = clickListener;
    }

    @Override
    public void onClick(View v) {

        // If not long clicked, pass last variable as false.
        clickListener.onClick(v, getPosition(), false);
    }

    @Override
    public boolean onLongClick(View v) {

        // If long clicked, passed last variable as true.
        clickListener.onClick(v, getPosition(), true);
        return true;
    }


  }
}
公共类HistoryAdapter扩展了RecyclerView.Adapter{
私有上下文;
私有列表数据集;
私人列表中期活动;
public HistoryAdapter(上下文上下文、列表数据集、列表idevent、列表askPrice、,
标价、标价、利润){
mContext=上下文;
mDataSet=数据集;
中间事件=中间事件;
}
@凌驾
public ViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图v=LayoutFlater.from(mContext)
.充气(R.layout.layout\u list\u历史记录,父项,false);
返回新的视图持有者(v);
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
毕加索.with(mContext).load(R.drawable.add2new).into(holder.image);
holder.text.setText(mDataSet.get(position));
setClickListener(新的HistoryAdapter.ViewHolder.ClickListener(){
公共void onClick(视图v、int-pos、布尔值isLongClick){
如果(单击){
//长时间单击位置处的视图v。
字符串poslx=pos+“”;
字符串menax=mDataSet.get(pos);
Toast.makeText(mContext,“longclick pos.”+poslx+“pair”+menax,Toast.LENGTH_SHORT).show();
}否则{
//单击位置处的视图v。
//字符串possx=pos+“”;
字符串poslx=pos+“”;
字符串event2=mDataSet.get(pos);
字符串id2=mIdevent.get(pos);
Toast.makeText(mContext,“shortclick pos.”+poslx+“pair”+event2,Toast.LENGTH_SHORT).show();
//切换选择(pos);
意图i=新意图(mContext,HistoryCandlesActivity.class);
Bundle extras=新Bundle();
额外的putString(“eventx”,event2);
额外输入字符串(“idx”,id2);
额外输入(“whatspage”,0);
i、 临时演员(临时演员);
v、 getContext().startActivity(i);
}
}
});
}
@凌驾
public int getItemCount(){
返回mDataSet.size();
}
公共无效删除(内部位置){
mDataSet.remove(位置);
已移除(位置)的项目;
}
公共空添加(字符串文本,int位置){
添加(位置、文本);
(位置);
}
静态类ViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener、View.OnLongClickListener{
公众形象;
公共文本查看文本;
私有ClickListener ClickListener;
公共视图持有者(视图项视图){
超级(项目视图);
image=(ImageView)itemView.findViewById(R.id.image);
text=(TextView)itemView.findViewById(R.id.text);
//我们将侦听器设置为整个项目视图,但也可以
//为标题或图标指定侦听器。
setOnClickListener(这个);
setOnLongClickListener(此);
}
/*处理点击的界面-正常和长点击*/
公共界面ClickListener{
/**
*单击视图时调用。
*
*@param v单击的视图
*@param单击项目的位置
*@param isLongClick如果长时间单击则为true,否则为false
*/
public void onClick(视图v、int位置、布尔值isLongClick);
}
/*侦听器的Setter*/
公共无效设置ClickListener(ClickListener ClickListener){
this.clickListener=clickListener;
}
@凌驾
公共void onClick(视图v){
//如果没有长时间单击,则将最后一个变量作为false传递。
单击Listener.onClick(v,getPosition(),false);
}
@凌驾
仅长按公共布尔值(视图v){
//如果长时间单击,则将最后一个变量作为true传递。
单击Listener.onClick(v,getPosition(),true);
返回true;
}
}
}

在方法onBindViewHolder中初始化setoncliklistener。举个例子,也许会有帮助

public class HistoryAdapter extends RecyclerView.Adapter<HistoryAdapter.ViewHolder> {

private Context mContext;
private List<String> mDataSet;
private List<String> mIdevent;


public HistoryAdapter(Context context, List<String> dataSet, List<String> idevent, List<String> askPrice, 
        List<String> bidPrice, List<String> Profit) {

    mContext = context;
    mDataSet = dataSet;
    mIdevent = idevent;

}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {      

    View v = LayoutInflater.from(mContext)
            .inflate(R.layout.layout_list_history, parent, false);
    return new ViewHolder(v);

}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    Picasso.with(mContext).load(R.drawable.add2new).into(holder.image);
    holder.text.setText(mDataSet.get(position));


    holder.setClickListener(new HistoryAdapter.ViewHolder.ClickListener() {
        public void onClick(View v, int pos, boolean isLongClick) {
            if (isLongClick) {

                // View v at position pos is long-clicked.
                String poslx = pos + "";
                String menax = mDataSet.get(pos);
                Toast.makeText(mContext, "longclick pos. " + poslx + " pair " + menax, Toast.LENGTH_SHORT).show();

            } else {
                // View v at position pos is clicked.
                //String possx = pos + "";
                String poslx = pos + "";
                String event2 = mDataSet.get(pos); 
                String id2 = mIdevent.get(pos);
                Toast.makeText(mContext, "shortclick pos. " + poslx + " pair " + event2, Toast.LENGTH_SHORT).show();
                //toggleSelection(pos);

                Intent i = new Intent(mContext, HistoryCandlesActivity.class);
                Bundle extras = new Bundle();
                extras.putString("eventx", event2);
                extras.putString("idx", id2);
                extras.putInt("whatspage", 0);
                i.putExtras(extras);
                v.getContext().startActivity(i);


            }
        }
    });

}



@Override
public int getItemCount() {
    return mDataSet.size();
}

public void remove(int position) {
    mDataSet.remove(position);
    notifyItemRemoved(position);
}

public void add(String text, int position) {
    mDataSet.add(position, text);
    notifyItemInserted(position);
}

static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {

    public ImageView image;
    public TextView text;
    private ClickListener clickListener;

    public ViewHolder(View itemView) {
        super(itemView);
        image = (ImageView) itemView.findViewById(R.id.image);
        text = (TextView) itemView.findViewById(R.id.text);

        // We set listeners to the whole item view, but we could also
        // specify listeners for the title or the icon.
        itemView.setOnClickListener(this);
        itemView.setOnLongClickListener(this);

    }


    /* Interface for handling clicks - both normal and long ones. */
    public interface ClickListener {

        /**
         * Called when the view is clicked.
         *
         * @param v view that is clicked
         * @param position of the clicked item
         * @param isLongClick true if long click, false otherwise
         */
        public void onClick(View v, int position, boolean isLongClick);

    }

    /* Setter for listener. */
    public void setClickListener(ClickListener clickListener) {
        this.clickListener = clickListener;
    }

    @Override
    public void onClick(View v) {

        // If not long clicked, pass last variable as false.
        clickListener.onClick(v, getPosition(), false);
    }

    @Override
    public boolean onLongClick(View v) {

        // If long clicked, passed last variable as true.
        clickListener.onClick(v, getPosition(), true);
        return true;
    }


  }
}
公共类HistoryAdapter扩展了RecyclerView.Adapter{
私有上下文;
私有列表数据集;
私人列表中期活动;
public HistoryAdapter(上下文上下文、列表数据集、列表idevent、列表askPrice、,
标价、标价、利润){
mContext=上下文;
mDataSet=数据集;
中间事件=中间事件;
}
@凌驾
public ViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图v=LayoutFlater.from(mContext)
.充气(R.layout.layout\u list\u历史记录,父项,false);
返回新的视图持有者(v);
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
毕加索.with(mContext).load(R.drawable.add2new).into(holder.image);
holder.text.setText(mDataSet.get(position));
setClickListener(新的HistoryAdapter.ViewHolder.ClickListener(){
公共void onClick(视图v、int-pos、布尔值isLongClick){
如果(单击){
//长时间单击位置处的视图v。
字符串poslx=pos+“”;
字符串menax=mDataSet.get(pos);
Toast.makeText(mContext,“longclick pos.”+poslx+“pair”+menax,Toast.LENGTH_SHORT).show();
}否则{
//单击位置处的视图v。
//字符串possx=pos+“”;
字符串poslx=pos+“”;