android recyclerview - रीसाइक्विविव में रीसाइक्विविव जोड़ें



android-recyclerview android-nestedscrollview (1)

मैंने Recyclerview के एक आइटम में एक Recyclerview जोड़ा ( https://github.com/lsjwzh/RecyclerViewPager )। और जब मैं उस पर स्पर्श करता हूं, तो मैं RecyclerView को स्क्रॉल करना चाहता हूं।

मैं प्रयास कर चुका हूं :

    View.OnTouchListener listener = new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_MOVE:
                case MotionEvent.ACTION_DOWN:
                    mRecyclerViewPager.requestDisallowInterceptTouchEvent(true);
                    break;
                case MotionEvent.ACTION_UP:
                case MotionEvent.ACTION_CANCEL:
                    mRecyclerViewPager.requestDisallowInterceptTouchEvent(false);
                    break;
            }
            return false;
        }
    };
    mRecyclerView.setOnTouchListener(listener);

लेकिन मैं केवल रीसाइक्लेयर वीव को कभी-कभी स्क्रॉल कर सकता हूँ

मुझे लगता है कि इसे NestedScrollingParent में NestedScrollingParent स्क्रोलिंगप्रेनर को लागू NestedScrollingParent या RecyclerViewPager NestedScrollingParent में NestedScrollingParent पर बदलकर इसे हटाया जा सकता है .परंतु मैं उनसे परिचित नहीं हूँ


मैंने गिटब दस्तावेज़ का उपयोग करके सरल उदाहरण को कॉन्फ़िगर करने और बनाने के लिए चरणों का पालन किया

मुख्य गतिविधि XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com..recyclerviewstack.MainActivity">

    <com.lsjwzh.widget.recyclerviewpager.RecyclerViewPager
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingLeft="1dp"
        android:paddingRight="1dp"
        app:rvp_triggerOffset="0.1"
        app:rvp_singlePageFling="true"
        android:clipToPadding="false"
        />
</RelativeLayout>

मुख्य कार्यकर्ता वर्ग

package com..recyclerviewstack;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;

import com.lsjwzh.widget.recyclerviewpager.RecyclerViewPager;

public class MainActivity extends AppCompatActivity {

    RecyclerAdapter mAdapter;
    RecyclerViewPager mRecycler;

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

        mRecycler = (RecyclerViewPager) findViewById(R.id.list);

        // setLayoutManager like normal RecyclerView, you do not need to change any thing.
        LinearLayoutManager layout = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
        mRecycler.setLayoutManager(layout);

        //set adapter
        //You just need to implements ViewPageAdapter by yourself like a normal RecyclerView.Adpater.
        mAdapter = new RecyclerAdapter(ItemListGenerator.generateCollection(15, "OutItem "));
        mRecycler.setAdapter(mAdapter);
    }
}

RecyclerAdapter

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

    List<String> collection;

    public RecyclerAdapter(List<String> collection) {
        this.collection = collection;
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        public TextView item;
        RecyclerView mInnerRecycler;

        public ViewHolder(View view) {
            super(view);
            item = (TextView) view.findViewById(R.id.title);
            mInnerRecycler = (RecyclerView) view.findViewById(R.id.innerRecycler);
            LinearLayoutManager layout = new LinearLayoutManager(view.getContext(),
                                                    LinearLayoutManager.HORIZONTAL, false);
            mInnerRecycler.setLayoutManager(layout);
            mInnerRecycler.setAdapter(new InnerAdapter());
        }
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        Context context = parent.getContext();
        LayoutInflater inflater = LayoutInflater.from(context);

        View view = inflater.inflate(R.layout.outer_collection, parent, false);
        ViewHolder viewHolder = new ViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        if(position < 0 || position > getItemCount()) return;

        String itemString = collection.get(position);
        holder.item.setText(itemString);

    }

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

ViewHolder बनाने के लिए रीसाइक्लर वीपपेजर द्वारा लेआउट का उपयोग

व्यूहाल्डर लेआउट बाह्य अनुक्रमणिका का उपयोग करता है:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="5dip"
        android:layout_margin="2dip"
        android:background="@color/colorPrimary"/>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/innerRecycler"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</LinearLayout>

इनरएडएपेटर

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


    List<String> collection;

    public InnerAdapter() {
        this.collection = ItemListGenerator.generateCollection(15, "Inner ");
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        public TextView item;

        public ViewHolder(View itemView) {
            super(itemView);
            item = (TextView) itemView.findViewById(R.id.item);
        }
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        Context context = parent.getContext();
        LayoutInflater inflater = LayoutInflater.from(context);

        View view = inflater.inflate(R.layout.simple_item, parent, false);
        ViewHolder viewHolder = new ViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        if(position < 0 || position > getItemCount()) return;
        holder.item.setText(collection.get(position));
    }

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

टिप

रिसाइकिलर वीपपेजर के लिए मैंने इस अभिविन्यास का इस्तेमाल किया:

 LinearLayoutManager layout = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);

और रिसाइकिलर के लिए इस एक के अंदर देखें:

LinearLayoutManager layout = new LinearLayoutManager(view.getContext(), LinearLayoutManager.HORIZONTAL, false);

यदि आप पेजरविज़ में VERTICAL का उपयोग करते हैं तो आप क्षैतिज संग्रह में नेविगेट कर सकते हैं या फिर पोजरविव ओरिएंटेशन को बदल सकते हैं और आप वर्टिकल ओरियनेशन में अपने अंदर की वस्तुओं को स्क्रॉल कर सकते हैं।

आपको इसका मूल्यांकन करना है कि आप इसका उपयोग कैसे करना चाहते हैं। मुझे उम्मीद है कि यह कोड आपकी समस्या के साथ मदद करेगा और अपने डिज़ाइन को पुनर्विचार भी करेगा। संभवतः एक अच्छा अभ्यास नहीं है या यूएक्स दोनों कंटेनरों के लिए समान अभिविन्यास का उपयोग करता है। मैं एक यूएक्स विशेषज्ञ नहीं हूँ

मैं और अधिक उपयोगी होना चाहूंगा





android-touch-event