【问题标题】:RecyclerView Cards - Open new ActivityRecyclerView Cards - 打开新活动
【发布时间】:2015-08-13 16:53:53
【问题描述】:

我有一个基本应用程序,它可以从在线 JSON 文件中获取一些数据。这是一个包含 6 个项目的数组。每个项目由几个整数、字符串等组成。卡片列表中只显示1个字符串和整数。

当我点击一张卡片时。应该打开一个新活动,并且应该打开一个更详细的视图。我已经在没有填写数据的情况下进行了这项活动。只是为了构建布局。但现在我有点卡住了。

从我的主要活动启动新 Intent 的正常 onClick 事件没有问题。问题是我不知道在哪里以及如何在卡片上的按钮上实现 onClick 方法,同时仍然知道点击了哪张卡片,因此我可以提供正确的信息。

关于这个话题有什么想法吗?已经搜索了一夜,但似乎每次都失败。

编辑: 这 6 个项目存储在主活动的列表中。所以我只需要知道被点击项目的索引号,这样我就可以在详细视图中读出正确的项目。

第二次编辑 viewHolder 点击不注册任何点击...

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

    CardView cv;
    TextView parkingName;
    TextView parkingCapacity;

    ParkingViewHolder(View itemView) {
        super(itemView);

        cv = (CardView)itemView.findViewById(R.id.cv);
        parkingName = (TextView)itemView.findViewById(R.id.parkingName);
        parkingCapacity = (TextView)itemView.findViewById(R.id.parkingCapacity);
    }

    @Override
    public void onClick(View v) {
        Toast.makeText(v.getContext(), "The Item Clicked is: " + getAdapterPosition(), Toast.LENGTH_SHORT).show();
    }

}

【问题讨论】:

    标签: android onclick android-recyclerview


    【解决方案1】:

    这就是我的工作。

    您有某种 ViewHolder,您可以在其上扩展 OnClickListener。

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener
    

    在您的 ViewHolder 中,您声明应该点击监听的内容 - 例如

    protected ImageView vRowImage;
    
    public ViewHolder(View v) {
                super(v);
                vRowImage = (ImageView) v.findViewById(R.id.rowImage);
    
                vRowImage.setClickable(true);
                vRowImage.setOnClickListener(this);
            }
    

    在这个例子中只有图片会被点击监听 - 你可以在按钮、整个视图 v 或任何你想要的东西上做。

    将私有 OnItemClickListener 添加到您的适配器。

    private OnItemClickListener mItemClickListener;
    

    在 ViewHolder 中覆盖 onClick

    @Override
        public void onClick(View v) {
            if (mItemClickListener != null) {
                mItemClickListener.onItemClick(v, getLayoutPosition());
            }
        }
    

    添加接口和设置方法

    public interface OnItemClickListener {
        void onItemClick(View view , int position);
    }
    
    public void SetOnItemClickListener(final OnItemClickListener mItemClickListener) {
        this.mItemClickListener = mItemClickListener;
    }
    

    在您的活动/片段中,您只需调用

    mAdapter.SetOnItemClickListener(new MySomethingAdapter.OnItemClickListener() {
        @Override
        public void onItemClick(View view, int position) {
        //you have view and position here
        }
    }
    

    【讨论】:

    • 我试试看。我目前正在做类似的事情。从这个source 但简单的 onClick 不想工作......即使是 System.out.println()
    • 为什么你的意思是完全不起作用?尝试仅设置 Toast on click,以便您知道它是否注册了点击
    • 我就是这么做的。 Toast 没有被执行,我不知道为什么。
    • 你没有打电话给.setClickable(true);.setOnClickListener(this);
    【解决方案2】:
    Give a hand to this code,
    
    import android.content.Context;
    import android.support.v7.widget.RecyclerView;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Button;
    import android.widget.TextView;
    
    
    import java.util.List;
    
    import modals.Feeds;
    
    
    /**
     * Created by inext on 3/7/15.
     */
    public class CAdapter extends RecyclerView.Adapter<CAdapter.ViewHolder> {
    
        private List<Feeds> items;
        private Context context;
    
        public CAdapter(final Context context, final List<Feeds> items, final FragmentClicked listener) {
            this.items = items;
            this.listener = listener;
            this.context = context;
        }
    
        @Override
        public CAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.frag_newfeed_row, parent, false);
            return new ViewHolder(view);
        }
    
        @Override
        public void onBindViewHolder(final FeedAdapter.ViewHolder holder, int position) {
    
        }
    
        @Override
        public int getItemCount() {
            return items.size();
        }
    
        public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
            public CircleImageView userImage;
            public TextView txt_user, txt_msg, txt_minute;
    
            public ViewHolder(View itemView) {
                super(itemView);
                Button btn = (Button) itemView.findViewById(R.id.frag_nfrow_bt_comment);
                btn.setOnClickListener(this);
            }
    
            @Override
            public void onClick(View v) {
                Intnet in=new (context,OtherActivity.class);
    startactivity(in);
            }
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-11
      相关资源
      最近更新 更多