8

ऑटो स्क्रॉलिंग समस्या & भी कोड का उपयोग कर कुछ विशिष्ट स्थिति में स्थानांतरित करना मुश्किल है।केंद्र चयन क्षैतिज स्क्रॉलव्यू के साथ रीसाइक्लर व्यू पर Notifydatasetchange काम नहीं कर रहा है?

मैं दो रीसाइक्लिंग व्यू को क्षैतिज स्क्रॉल और केंद्र चयन के साथ एक-दूसरे पर निर्भर करता हूं।

तो मेरी समस्या Notifydatasetchanged की विधि का उपयोग करने के लिए और 0 recyclerView स्थिति reseting और यह चयन रेंज स्क्रॉल है, क्योंकि यह गलत सूचकांक लौटा रहा है है ...

जब मैं डेटा को बदलने के बाद केंद्र चयन सूचकांक प्राप्त करना चाहते हैं। मैं कुछ संपादन के साथ इसे प्राप्त करने के लिए नीचे उदाहरण का उपयोग कर रहा हूं।

Get center visible item of RecycleView when scrolling

मैं डेटा परिवर्तन के साथ दूसरे recyclerView एडाप्टर पहले recyclerView एडाप्टर की पुस्तक पर डेटा को बदलने की जरूरत है।

लेकिन scrollview स्थिति पहले की स्थिति में मैं notifyItemRangeChanged (int, int) notifyItemRangeInserted (int, int) तरीके ... की कोशिश की सेट

विस्तार से स्पष्टीकरण: मैं प्रकार बदलने कर रहा हूँ और का मान रीसेट स्क्रॉलव्यू देखो। मुझे नीचे स्क्रॉलव्यू की चयनित स्थिति बदलने की जरूरत है। विशेष रूप से मुझे डेटा बदलकर केंद्र की स्थिति नहीं मिल सकती है। मतलब है कि अगर मैं इंडेक्स की तुलना में एडाप्टर को अधिसूचित कर रहा हूं तो यह वैसे ही रहेगा। मुझे रीसेट डेटा के बाद सामान्य एडाप्टर की तरह काम करने की ज़रूरत है।

अग्रिम धन्यवाद।

public void getRecyclerview_Type() { 

    final RecyclerView recyclerView_Type = (RecyclerView) findViewById(R.id.recycleView); 
    if (recyclerView_Type != null) { 
     recyclerView_Type.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       setTypeValue(); 
      } 
     }, 300); 
     recyclerView_Type.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       // recyclerView_Type.smoothScrollToPosition(Type_Adapter.getItemCount() - 1); 
       setTypeValue(); 
      } 
     }, 5000); 
    } 
    ViewTreeObserver treeObserver = recyclerView_Type.getViewTreeObserver(); 
    treeObserver.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { 

     @Override 
     public boolean onPreDraw() { 
      recyclerView_Type.getViewTreeObserver().removeOnPreDrawListener(this); 
      finalWidthDate = recyclerView_Type.getMeasuredWidth(); 
      itemWidthDate = getResources().getDimension(R.dimen.item_dob_width_padding); 
      paddingDate = (finalWidthDate - itemWidthDate)/2; 
      firstItemWidthDate = paddingDate; 
      allPixelsDate = 0; 

      final LinearLayoutManager dateLayoutManager = new LinearLayoutManager(getApplicationContext()); 
      dateLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); 
      recyclerView_Type.setLayoutManager(dateLayoutManager); 
      recyclerView_Type.addOnScrollListener(new RecyclerView.OnScrollListener() { 
       @Override 
       public void onScrollStateChanged(RecyclerView recyclerView, int newState) { 
        super.onScrollStateChanged(recyclerView, newState); 
        synchronized (this) { 
         if (newState == RecyclerView.SCROLL_STATE_IDLE) { 
          calculatePositionAndScroll_Type(recyclerView); 
         } 
        } 
       } 

       @Override 
       public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
        super.onScrolled(recyclerView, dx, dy); 
        allPixelsDate += dx; 
       } 
      }); 
      if (mTypeBeanArrayList == null) { 
       mTypeBeanArrayList = new ArrayList<>(); 
      } 
      getMedicationType(); 
      Type_Adapter = new Medication_Type_RecyclerAdapter(Add_Reminder_medicationlook_Activity.this, mTypeBeanArrayList, (int) firstItemWidthDate); 
      recyclerView_Type.setAdapter(Type_Adapter); 
      Type_Adapter.setSelecteditem(Type_Adapter.getItemCount() - 1); 
      return true; 
     } 
    }); 
} 

private void getMedicationType() { 

    for (int i = 0; i < mTypeBeanArrayList.size(); i++) { 
     Medication_TypeBean medication_typeBean = mTypeBeanArrayList.get(i); 


     Log.print("Image name :" +medication_typeBean.getType_image_name()); 
     if (i == 0 || i == (mTypeBeanArrayList.size() - 1)) { 
      medication_typeBean.setType(VIEW_TYPE_PADDING); 
     } else { 
      medication_typeBean.setType(VIEW_TYPE_ITEM); 
     } 
     mTypeBeanArrayList.set(i, medication_typeBean); 

    } 
} 

/* इस करता है, तो सबसे महत्वपूर्ण है, अगर expectedPositionDate < 0 recyclerView निकटतम आइटम वापस आ जाएगी */

private void calculatePositionAndScroll_Type(RecyclerView recyclerView) { 
    int expectedPositionDate = Math.round((allPixelsDate + paddingDate - firstItemWidthDate)/itemWidthDate); 

    if (expectedPositionDate == -1) { 
     expectedPositionDate = 0; 
    } else if (expectedPositionDate >= recyclerView.getAdapter().getItemCount() - 2) { 
     expectedPositionDate--; 
    } 
    scrollListToPosition_Type(recyclerView, expectedPositionDate); 

} 

/* this if most important, if expectedPositionDate < 0 recyclerView will return to nearest item*/ 
private void scrollListToPosition_Type(RecyclerView recyclerView, int expectedPositionDate) { 
    float targetScrollPosDate = expectedPositionDate * itemWidthDate + firstItemWidthDate - paddingDate; 
    float missingPxDate = targetScrollPosDate - allPixelsDate; 
    if (missingPxDate != 0) { 
     recyclerView.smoothScrollBy((int) missingPxDate, 0); 
    } 
    setTypeValue(); 

} 

private void setTypeValue() { 
    int expectedPositionDateColor = Math.round((allPixelsDate + paddingDate - firstItemWidthDate)/itemWidthDate); 
    int setColorDate = expectedPositionDateColor + 1; 

    Type_Adapter.setSelecteditem(setColorDate); 
    mTxt_type_name.setText(mTypeBeanArrayList.get(setColorDate).getMedication_type_name()); 

    mSELECTED_TYPE_ID = setColorDate; 

    //NotifyLookChangetoType(setColorDate); 
} 

// प्रकार एडाप्टर

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

    private ArrayList<Medication_TypeBean> medication_typeBeanArrayList; 
    private static final int VIEW_TYPE_PADDING = 1; 
    private static final int VIEW_TYPE_ITEM = 2; 
    private int paddingWidthDate = 0; 
    private Context mContext; 
    private int selectedItem = -1; 

    public Medication_Type_RecyclerAdapter(Context context, ArrayList<Medication_TypeBean> dateData, int paddingWidthDate) { 
     this.medication_typeBeanArrayList = dateData; 
     this.paddingWidthDate = paddingWidthDate; 
     this.mContext = context; 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     if (viewType == VIEW_TYPE_ITEM) { 
      final View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_medication_type, 
        parent, false); 
      return new ViewHolder(view); 
     } else { 
      View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_medication_type, 
        parent, false); 
      RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) view.getLayoutParams(); 
      layoutParams.width = paddingWidthDate; 
      view.setLayoutParams(layoutParams); 
      return new ViewHolder(view); 
     } 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 
     Medication_TypeBean medication_typeBean = mTypeBeanArrayList.get(position); 
     if (getItemViewType(position) == VIEW_TYPE_ITEM) { 
      // holder.mTxt_Type.setText(medication_typeBean.getMedication_type_name()); 
      //holder.mTxt_Type.setVisibility(View.VISIBLE); 
      holder.mImg_medication.setVisibility(View.VISIBLE); 
      int d = R.drawable.ic_type_pill; 
      try { 
       //Due to Offline requirements we do code like this get the images from our res folder 

       if (medication_typeBean.getType_image_name().equalsIgnoreCase("ic_type_pill")) { 
        d = R.drawable.ic_type_pill; 
       } else if (medication_typeBean.getType_image_name().equalsIgnoreCase("ic_type_patch")) { 
        d = R.drawable.ic_type_patch; 
       } else if (medication_typeBean.getType_image_name().equalsIgnoreCase("ic_type_capsule")) { 

        d = R.drawable.ic_type_capsule; 

       } else if (medication_typeBean.getType_image_name().equalsIgnoreCase("ic_type_ring")) { 

        d = R.drawable.ic_type_ring; 

       } else if (medication_typeBean.getType_image_name().equalsIgnoreCase("ic_type_inhaler")) { 

        d = R.drawable.ic_type_inhaler; 


       } else if (medication_typeBean.getType_image_name().equalsIgnoreCase("ic_type_spray")) { 

        d = R.drawable.ic_type_spray; 


       } else if (medication_typeBean.getType_image_name().equalsIgnoreCase("ic_type_bottle")) { 

        d = R.drawable.ic_type_bottle; 

       } else if (medication_typeBean.getType_image_name().equalsIgnoreCase("ic_type_drop")) { 

        d = R.drawable.ic_type_drop; 


       } else if (medication_typeBean.getType_image_name().equalsIgnoreCase("ic_type_pessaries")) { 

        d = R.drawable.ic_type_pessaries; 

       } else if (medication_typeBean.getType_image_name().equalsIgnoreCase("ic_type_sachets")) { 

        d = R.drawable.ic_type_sachets; 


       } else if (medication_typeBean.getType_image_name().equalsIgnoreCase("ic_type_tube")) { 

        d = R.drawable.ic_type_tube; 


       } else if (medication_typeBean.getType_image_name().equalsIgnoreCase("ic_type_suppository")) { 

        d = R.drawable.ic_type_suppository; 

       } else if (medication_typeBean.getType_image_name().equalsIgnoreCase("ic_type_injaction")) { 

        d = R.drawable.ic_type_injaction; 

       } else if (medication_typeBean.getType_image_name().equalsIgnoreCase("ic_type_spoon")) { 

        d = R.drawable.ic_type_spoon; 

       } else if (medication_typeBean.getType_image_name().equalsIgnoreCase("ic_type_powder")) { 

        d = R.drawable.ic_type_powder; 

       } else { 
        d = R.drawable.ic_type_pill; 
       } 

       Bitmap icon = BitmapFactory.decodeResource(mContext.getResources(), 
         d); 
       holder.mImg_medication.setImageBitmap(icon); 
      } catch (Exception e) { 
       Log.print(e); 
      } 


      //  BitmapDrawable ob = new BitmapDrawable(mContext.getResources(), icon); 
      // img.setBackgroundDrawable(ob); 
      // holder.mImg_medication.setBackground(ob); 

      // Log.print("Type Adapter", "default " + position + ", selected " + selectedItem); 
      if (position == selectedItem) { 
       Log.print("Type adapter", "center" + position); 
       // holder.mTxt_Type.setTextColor(Color.parseColor("#76FF03")); 
       //holder.mImg_medication.setColorFilter(Color.GREEN); 
       // holder.mTxt_Type.setTextSize(35); 
       holder.mImg_medication.getLayoutParams().height = (int) mContext.getResources().getDimension(R.dimen.item_dob_width) + 10; 
       holder.mImg_medication.getLayoutParams().width = (int) mContext.getResources().getDimension(R.dimen.item_dob_width) + 10; 
      } else { 
       holder.mImg_medication.getLayoutParams().height = (int) mContext.getResources().getDimension(R.dimen.item_dob_width) - 10; 
       holder.mImg_medication.getLayoutParams().width = (int) mContext.getResources().getDimension(R.dimen.item_dob_width) - 10; 
       // holder.mTxt_Type.setTextColor(Color.WHITE); 
       //holder.mImg_medication.setColorFilter(null); 
       // holder.mTxt_Type.setVisibility(View.INVISIBLE); 
       // holder.mTxt_Type.setTextSize(18); 
       // holder.mImg_medication.getLayoutParams().height = 70; 
       // holder.mImg_medication.getLayoutParams().width = 70; 
      } 
     } else { 
      holder.mImg_medication.getLayoutParams().height = (int) mContext.getResources().getDimension(R.dimen.item_dob_width) - 10; 
      holder.mImg_medication.getLayoutParams().width = (int) mContext.getResources().getDimension(R.dimen.item_dob_width) - 10; 
      // holder.mTxt_Type.setVisibility(View.INVISIBLE); 
      holder.mImg_medication.setVisibility(View.INVISIBLE); 
     } 
    } 

    public void setSelecteditem(int selecteditem) { 
     this.selectedItem = selecteditem; 
     notifyDataSetChanged(); 

     if (medication_lookBeanArrayList != null && Look_Adapter != null) { 
      NotifyLookChangetoType(selecteditem); 
     } 
    } 

    public int getSelecteditem() { 
     return selectedItem; 
    } 

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

    @Override 
    public int getItemViewType(int position) { 
     Medication_TypeBean medication_typeBean = medication_typeBeanArrayList.get(position); 
     if (medication_typeBean.getType() == VIEW_TYPE_PADDING) { 
      return VIEW_TYPE_PADDING; 
     } else { 
      return VIEW_TYPE_ITEM; 
     } 
    } 

    public class ViewHolder extends RecyclerView.ViewHolder { 
     //public TextView mTxt_Type; 
     public ImageView mImg_medication; 

     public ViewHolder(View itemView) { 
      super(itemView); 
      // mTxt_Type = (TextView) itemView.findViewById(R.id.mTxt); 
      mImg_medication = (ImageView) itemView.findViewById(R.id.mImg_medication); 
     } 
    } 
} 

//Type Adapter ends ************************************************ 

enter image description here

+0

मुझे यकीन नहीं है कि आप क्या करने का प्रयास कर रहे हैं। क्या आप शीर्ष सूची को नीचे की सूची के समान स्थिति में स्क्रॉल करना चाहते हैं? आप अपनी चयनित स्थिति को बदलने के लिए शीर्ष सूची कब चाहते हैं? – Caleb

+0

मैं प्रकार बदल रहा हूं और देखो स्क्रॉलव्यू के मान को रीसेट कर रहा हूं। मुझे नीचे स्क्रॉलव्यू की चयनित स्थिति बदलने की जरूरत है। विशेष रूप से मुझे डेटा बदलकर केंद्र की स्थिति नहीं मिल सकती है। मतलब है कि अगर मैं इंडेक्स की तुलना में एडाप्टर को अधिसूचित कर रहा हूं तो यह वैसे ही रहेगा। मुझे रीसेट डेटा के बाद सामान्य एडाप्टर की तरह काम करने की आवश्यकता है। – KDOSHI

+0

@ कैलेब: मैं मामले को विस्तार से समझाता हूं। क्या आप इसे अभी जांच सकते हैं – KDOSHI

उत्तर

0

मैं मुझे यकीन नहीं है कि मैं आपको ठीक से प्राप्त करता हूं लेकिन आप एक आर के डेटा को बदलना चाहते हैं ecyclerview और अन्य recyclerview

रीसाइक्लिंग View.scrollToPosition (INDEX_YOU_WANT_TO_SCROLL_TO) का उपयोग करने का प्रयास करें;

यदि आप डाटा recyclerview.scrollToPosition (arraylist.size()/2) का केंद्र पोस्ट प्राप्त करना चाहते हैं; सरणी जिसमें आपका ड्रायबल डेटा संग्रहीत किया जाता है

संबंधित मुद्दे