Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 同时处理Recyclerview和CardView的点击事件_Java_Android_Android Recyclerview_Android Cardview - Fatal编程技术网

Java 同时处理Recyclerview和CardView的点击事件

Java 同时处理Recyclerview和CardView的点击事件,java,android,android-recyclerview,android-cardview,Java,Android,Android Recyclerview,Android Cardview,我需要创建嵌套的recyclerView,就像 RecyclerView-Contains->CardView-Contains->RecyclerView 若我点击卡片,我得到的只是子卡片的位置,但我也需要父卡片的位置。如何同时处理Recyclerview和CardView的点击事件 MainActivity.java: public class MainActivity extends Activity { LinearLayout linView; private RecyclerView

我需要创建嵌套的recyclerView,就像

RecyclerView-Contains->CardView-Contains->RecyclerView

若我点击卡片,我得到的只是子卡片的位置,但我也需要父卡片的位置。如何同时处理Recyclerview和CardView的点击事件

MainActivity.java:

public class MainActivity extends Activity {
LinearLayout linView;
private RecyclerView main_view;
RootAdapter adapter2;
private RelativeLayout mRelativeLayout;
private Context mContext;
private Activity mActivity;

int pos = 0;
int main_pos;

private static RecyclerView.Adapter adapter;
private static RecyclerView.Adapter adapterCo;
private RecyclerView.LayoutManager layoutManager;
private static ArrayList<DataModelMain> dataMain;
private static ArrayList<DataModel_CO> dataCo;
static View.OnClickListener myOnClickListener;
static View.OnClickListener onClickListener;
private static ArrayList<Integer> removedItems;
TestMain mainData = new TestMain();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    prof = (ImageView) findViewById(R.id.profile);

    main_view = (RecyclerView) findViewById(R.id.recycler_main);

    mRelativeLayout = (RelativeLayout) findViewById(R.id.partners);
    cont = (TextView) findViewById(R.id.mobile);
    iconType = (ImageView) findViewById(R.id.icon_type);
    linView = (LinearLayout) findViewById(R.id.layout_view);

    // Get the application context
    mContext = getApplicationContext();
    // Get the activity
    mActivity = MainActivity.this;

    myOnClickListener = new MyOnClickListener(this);
    onClickListener = new OnClickListener(this);

    main_view.setHasFixedSize(true);

    layoutManager = new LinearLayoutManager(
            this,
            LinearLayoutManager.VERTICAL,
            false
    ) {


    };

    main_view.setLayoutManager(layoutManager);
    main_view.setItemAnimator(new DefaultItemAnimator());
    dataMain = new ArrayList<DataModelMain>();

    getMainData();
    setMainView();
}
}

private void getMainData() {

    for (int i = 0; i < mainData.passengers.length; i++) {
        dataMain.add(new DataModelMain(
                mainData.type[i],
                mainData.passengers[i],
                mainData.p_name[i],
                mainData.p_contact[i],
                mainData.p_flight[i],
                mainData.p_pnr[i],
                mainData.air[i],
                mainData.p_time[i]
        ));
    }

    adapter2 = new RootAdapter(this, dataMain);
    main_view.setAdapter(adapter2);
}


private class MyOnClickListener implements View.OnClickListener {

    private final Context context;

    private MyOnClickListener(Context context) {
        this.context = context;
    }

    @Override
    public void onClick(View v) {
        showIcons(v);
    }

    private void showIcons(View v) {
        pos = main_view.getChildPosition(v);
        setMainView();

    }

}
private class OnClickListener implements View.OnClickListener {

    private final Context context1;

    private OnClickListener(Context context0) {
        this.context1 = context0;
    }

    @Override
    public void onClick(View v) {
        showIcons(v);
    }

    private void showIcons(View v) {
        pos = main_view.getChildPosition(v);
        Log.e("CLICKED","pos: "+pos);

    }

}


private class RootAdapter extends RecyclerView.Adapter<RootAdapter.RootViewHolder> {

    private final LayoutInflater inflater;
    String[] _items = new String[]{"GROUP 1", "GROUP 2", "GROUP 3", "GROUP 4"};
    private ArrayList<DataModelMain> dataSet;
    public RootAdapter(Context context,ArrayList<DataModelMain> data) {
        inflater = LayoutInflater.from(context);
        this.dataSet = data;
    }

    @Override
    public RootViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View view = inflater.inflate(R.layout.card_main, viewGroup, false);
        RootViewHolder rvi = new RootViewHolder(view);
        view.setOnClickListener(MainActivity.onClickListener);
        return rvi;
    }

    @Override
    public void onBindViewHolder(RootViewHolder rootViewHolder, int i) {

        rootViewHolder.recyclerViewChild.setLayoutManager(new LinearLayoutManager(inflater.getContext()));
        rootViewHolder.recyclerViewChild.setAdapter(new ChildAdapter(inflater,dataSet));
    }

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

    class RootViewHolder extends RecyclerView.ViewHolder {

        RecyclerView recyclerViewChild;

        public RootViewHolder(View itemView) {
            super(itemView);
            recyclerViewChild = (RecyclerView) itemView.findViewById(R.id.recycler_partners);

        }
    }
}


private class ChildAdapter extends RecyclerView.Adapter<ChildAdapter.ChildViewHolder> {
    private LayoutInflater _inflater;

    private ArrayList<DataModelMain> dataSet;


    public ChildAdapter(LayoutInflater inflater,ArrayList<DataModelMain> data) {
        _inflater = inflater;
        this.dataSet = data;
    }

    @Override
    public ChildViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View view = _inflater.inflate(R.layout.card_partner, viewGroup, false);
        ChildViewHolder rvi = new ChildViewHolder(view);
        view.setOnClickListener(MainActivity.myOnClickListener);
        return rvi;
    }

    @Override
    public void onBindViewHolder(ChildViewHolder holder, int listPosition) {
        TextView name = holder.tvName;
        TextView cont = holder.tvCont;
        TextView flight = holder.tvFlight;
        TextView pnr = holder.tvPNR;
        TextView time = holder.tvTime;
        ImageView type = holder.im_type;
        ImageView pic = holder.im_pic;
        ImageView logo = holder.im_logo;
        CardView cardView = holder.card;

        name.setText(dataSet.get(listPosition).getName());
        cont.setText(dataSet.get(listPosition).getContact());
        flight.setText(dataSet.get(listPosition).getFlight());
        pnr.setText(dataSet.get(listPosition).getPnr());
        time.setText(dataSet.get(listPosition).getTime());
        type.setImageResource(dataSet.get(listPosition).getType());
        pic.setImageResource(dataSet.get(listPosition).getImage());
        logo.setImageResource(dataSet.get(listPosition).getLogo());

        switch (dataSet.get(listPosition).getType()){

            case R.mipmap.gov:
                cardView.setCardBackgroundColor(Color.parseColor("#FAFAD2"));
                break;
            case R.mipmap.vip:
                cardView.setCardBackgroundColor(Color.parseColor("#CDFFCD"));
                break;
            case R.mipmap.jail:
                cardView.setCardBackgroundColor(Color.parseColor("#FFE4E1"));
                break;
            case R.mipmap.ban:
                cardView.setCardBackgroundColor(Color.parseColor("#DCDCDC"));
                break;

        }
    }

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

    public class ChildViewHolder extends RecyclerView.ViewHolder {

        ImageView im_type,im_pic,im_logo;
        TextView tvName,tvCont,tvFlight,tvPNR,tvTime;
        CardView card;

        public ChildViewHolder(View itemView) {
            super(itemView);
            this.card = (CardView) itemView.findViewById(R.id.card_view);
            this.im_type = (ImageView) itemView.findViewById(R.id.p_type);
            this.im_pic = (ImageView) itemView.findViewById(R.id.p_profile);
            this.im_logo = (ImageView) itemView.findViewById(R.id.p_air_lines);
            this.tvName = (TextView) itemView.findViewById(R.id.p_name);
            this.tvCont = (TextView) itemView.findViewById(R.id.p_mob);
            this.tvFlight = (TextView) itemView.findViewById(R.id.p_flight);
            this.tvPNR = (TextView) itemView.findViewById(R.id.p_pnr);
            this.tvTime = (TextView) itemView.findViewById(R.id.p_timer);
        }
    }
}
}
公共类MainActivity扩展活动{
线性布局linView;
private RecyclerView主视图;
根适配器适配器2;
私人关系的相关布局;
私有上下文;
私人活动能力;
int pos=0;
int main_pos;
专用静态RecyclerView.适配器;
专用静态回收器查看适配器适配器适配器;
private RecyclerView.LayoutManager LayoutManager;
私有静态ArrayList dataMain;
私有静态ArrayList数据公司;
static View.OnClickListener myOnClickListener;
static View.OnClickListener OnClickListener;
私有静态ArrayList removedItems;
TestMain mainData=新的TestMain();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
prof=(ImageView)findViewById(R.id.profile);
主视图=(RecyclerView)findViewById(R.id.recycler\u主视图);
mrrelativelayout=(RelativeLayout)findViewById(R.id.partners);
cont=(TextView)findViewById(R.id.mobile);
iconType=(ImageView)findViewById(R.id.icon\u类型);
linView=(线性布局)findViewById(R.id.layout\U视图);
//获取应用程序上下文
mContext=getApplicationContext();
//获得活动
mActivity=MainActivity.this;
myOnClickListener=新的myOnClickListener(此);
onClickListener=新的onClickListener(此);
主视图。setHasFixedSize(真);
layoutManager=新建LinearLayoutManager(
这
LinearLayoutManager.VERTICAL,
假的
) {
};
主视图.setLayoutManager(layoutManager);
main_view.setItemAnimator(新的DefaultItemAnimator());
dataMain=newarraylist();
getMainData();
setMainView();
}
}
私有void getMainData(){
对于(int i=0;irootViewHolder.rootCardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               // keep an track of the selected position of the cardView and store it in a global/local variable
            }
        });
rootViewHolder.getAdapterPosition()

Note: rootViewHolder is written as per your ViewHolder class