在装载点击CardView从RecyclerView片段 [英] Load a fragment on clicking CardView from RecyclerView

查看:293
本文介绍了在装载点击CardView从RecyclerView片段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 RecyclerView CardView 里面。现在我想要做的是加载一个简单的片段上点击CardView。我不能这样做与FragmentManager或SupportFragmentManager。请给我一些指示。

我的RecyclerViewAdapder和ViewHolder是..

 公共类RecyclerViewAdapter扩展RecyclerView.Adapter< RecyclerViewAdapter.ViewHolder> {
    私有String [] eventName的;
    私有String [] eventBrief;    公共静态类ViewHolder扩展RecyclerView.ViewHolder {        公众的TextView textViewName,textViewBrief;
        公共CardView cardView;        公共ViewHolder(视图v){
            超级(五);            textViewName =(TextView中)v.findViewById(R.id.textViewName);
            textViewBrief =(TextView中)v.findViewById(R.id.textViewBrief);
            最后上下文的背景下= v.getContext();
            cardView =(CardView)v.findViewById(R.id.card_view);            cardView.setOnClickListener(新View.OnClickListener(){
                @覆盖
                公共无效的onClick(查看视图){
                    EventFragment eventFragment = EventFragment.newInstance();
                    //装载这里查看eventFragment?
                }
            });
        }
    }    公共RecyclerViewAdapter(字符串[] eventName的,的String [] eventBrief){
        this.eventName = eventName的;
        this.eventBrief = eventBrief;    }    @覆盖
    公共RecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup中父母,
                                                   INT viewType){
        视图V = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.my_card_view,父母,假);
        返回新ViewHolder(V);
    }    @覆盖
    公共无效onBindViewHolder(ViewHolder持有人,INT位置){
        holder.textViewName.setText(eventName的[位置]);
        holder.textViewBrief.setText(eventBrief [位置]);
    }    @覆盖
    公众诠释getItemCount(){
        返回eventName.length;
    }
}


解决方案

有很多方法去这个,真的。我觉得最好的实现是一个回调到活动通知项目已被点击。我给你一只手用一些code:

 公共类RecyclerViewAdapter扩展RecyclerView.Adapter< RecyclerViewAdapter.ViewHolder> {
私有String [] eventName的;
私有String [] eventBrief;
私人OnItemClickListener侦听器;ViewHolder扩展RecyclerView.ViewHolder公共静态类实现View.OnClickListener {    公众的TextView textViewName,textViewBrief;
    公共CardView cardView;
    私人OnItemClickListener侦听器;    公共ViewHolder(视图V,OnItemClickListener听众){
        超级(五);        textViewName =(TextView中)v.findViewById(R.id.textViewName);
        textViewBrief =(TextView中)v.findViewById(R.id.textViewBrief);
        最后上下文的背景下= v.getContext();
        cardView =(CardView)v.findViewById(R.id.card_view);        cardView.setOnClickListener(新View.OnClickListener(){
            @覆盖
            公共无效的onClick(查看视图){
                如果(听众!= NULL)
                   listener.onItemClick(textViewName.getText()。的toString()
         textViewBrief.getText()的toString()。
            }
        });
    }
}公共RecyclerViewAdapter(字符串[] eventName的,的String [] eventBrief){
    this.eventName = eventName的;
    this.eventBrief = eventBrief;}@覆盖
公共RecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup中父母,
                                               INT viewType){
    视图V = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.my_card_view,父母,假);
    返回新ViewHolder(V);
}@覆盖
公共无效onBindViewHolder(ViewHolder持有人,INT位置){
    holder.textViewName.setText(eventName的[位置]);
    holder.textViewBrief.setText(eventBrief [位置]);
    holder.setOnItemClickListener(监听);
}@覆盖
公众诠释getItemCount(){
    返回eventName.length;
}公共无效setOnItemClickListener(OnItemClickListener监听){
    this.listener =监听器
}公共接口OnItemClickListener {
   公共无效onItemClick(字符串textName,字符串textViewBrief);
}

}

然后在你的活动只是实例化它是这样的:

  RecyclerViewAdapter适配器=新RecyclerViewAdapter(eventName的,eventBrief);
adapter.setOnItemClickListener(新RecyclerViewAdapter.OnItemClickListener(){
        公共无效onItemClick(字符串textName,字符串textViewBrief){
            EventFragment eventFragment = EventFragment.newInstance();
            //用自己的观点替换内容框架。
            FragmentTransaction英尺= getSupportFragmentManager()调用BeginTransaction()。 ft.replace(R.id.content_frame,eventFragment).commit()
       }
});

I've a RecyclerView and CardView inside it. Now what i want to do is load a simple Fragment on clicking the CardView. I'm not able to do that with FragmentManager or SupportFragmentManager. Please give me some directions.

My RecyclerViewAdapder and ViewHolder are ..

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
    private String[] eventName;
    private String[] eventBrief;

    public static class ViewHolder extends RecyclerView.ViewHolder {

        public TextView textViewName, textViewBrief;
        public CardView cardView;

        public ViewHolder(View v) {
            super(v);

            textViewName = (TextView)v.findViewById(R.id.textViewName);
            textViewBrief = (TextView)v.findViewById(R.id.textViewBrief);
            final Context context = v.getContext();
            cardView = (CardView)v.findViewById(R.id.card_view);

            cardView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    EventFragment eventFragment = EventFragment.newInstance();
                    // Load and view eventFragment here??
                }
            });
        }
    }

    public RecyclerViewAdapter(String[] eventName, String[] eventBrief) {
        this.eventName = eventName;
        this.eventBrief = eventBrief;

    }

    @Override
    public RecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                   int viewType) {
        View v = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.my_card_view, parent, false);
        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        holder.textViewName.setText(eventName[position]);
        holder.textViewBrief.setText(eventBrief[position]);
    }

    @Override
    public int getItemCount() {
        return eventName.length;
    }
}

解决方案

There are many ways to go at this, really. I feel that the best implementation is a callback to the activity notifying that an item has been clicked. I'll give you a hand with some code:

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
private String[] eventName;
private String[] eventBrief;
private OnItemClickListener listener;

public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    public TextView textViewName, textViewBrief;
    public CardView cardView;
    private OnItemClickListener listener;

    public ViewHolder(View v, OnItemClickListener listener) {
        super(v);

        textViewName = (TextView)v.findViewById(R.id.textViewName);
        textViewBrief = (TextView)v.findViewById(R.id.textViewBrief);
        final Context context = v.getContext();
        cardView = (CardView)v.findViewById(R.id.card_view);

        cardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(listener!=null)
                   listener.onItemClick(textViewName.getText().toString(),
         textViewBrief.getText().toString();
            }
        });
    }
}

public RecyclerViewAdapter(String[] eventName, String[] eventBrief) {
    this.eventName = eventName;
    this.eventBrief = eventBrief;

}

@Override
public RecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                               int viewType) {
    View v = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.my_card_view, parent, false);
    return new ViewHolder(v);
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    holder.textViewName.setText(eventName[position]);
    holder.textViewBrief.setText(eventBrief[position]);
    holder.setOnItemClickListener(listener);
}

@Override
public int getItemCount() {
    return eventName.length;
}

public void setOnItemClickListener(OnItemClickListener listener){
    this.listener = listener
}

public interface OnItemClickListener{
   public void onItemClick(String textName, String textViewBrief); 
}

}

Then in your activity just instantiate it like this:

RecyclerViewAdapter adapter = new RecyclerViewAdapter(eventName, eventBrief);
adapter.setOnItemClickListener(new RecyclerViewAdapter.OnItemClickListener(){
        public void onItemClick(String textName, String textViewBrief){
            EventFragment eventFragment = EventFragment.newInstance();
            //replace content frame with your own view.
            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();    ft.replace(R.id.content_frame, eventFragment).commit()
       }
});

这篇关于在装载点击CardView从RecyclerView片段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆