Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.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
Android 在recyclerview中更改notifydatachanged期间保留连锁反应_Android_Android Recyclerview_Ripple - Fatal编程技术网

Android 在recyclerview中更改notifydatachanged期间保留连锁反应

Android 在recyclerview中更改notifydatachanged期间保留连锁反应,android,android-recyclerview,ripple,Android,Android Recyclerview,Ripple,我开始修改我的应用程序以支持棒棒糖。基本上,我有一个带有recyclerview的文件浏览器片段,当用户打开该片段时,他将看到其根目录上的所有文件夹,当用户单击文件夹时,我需要获取所有子文件夹+文件,并使用相同的recyclerview和notifydatachanged向用户显示它们。功能正常工作问题在于,当用户单击文件夹时,在更改期间不会保留连锁反应 文件\u item.xml <TextView xmlns:android="http://schemas.android.com/ap

我开始修改我的应用程序以支持棒棒糖。基本上,我有一个带有recyclerview的文件浏览器片段,当用户打开该片段时,他将看到其根目录上的所有文件夹,当用户单击文件夹时,我需要获取所有子文件夹+文件,并使用相同的recyclerview和notifydatachanged向用户显示它们。功能正常工作问题在于,当用户单击文件夹时,在更改期间不会保留连锁反应

文件\u item.xml

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/file_name"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="?attr/selectableItemBackground"
    android:clickable="true"
    android:drawablePadding="15dp"
    android:ellipsize="marquee"
    android:focusable="true"
    android:gravity="center_vertical"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:paddingLeft="14dip"
    android:paddingRight="15dip"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textColor="?android:attr/textColorAlertDialogListItem" />

Recyclerview适配器:

public class RecycleAdapter extends RecyclerView.Adapter<RecycleAdapter.CustomViewHolder>{

    private List<Item> _data;
    private Context _context;
    private IFileListener _listener;

    public RecycleAdapter(Context context, List<Item> data,IFileListener listener) {
        _data = data;
        _context = context;
        _listener = listener;
    }

    public void setData(List<Item> data)
    {
        _data = data;
        notifyDataSetChanged();
    }


    @Override
    public CustomViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(_context).inflate(R.layout.file_item, viewGroup,false);

        CustomViewHolder viewHolder = new CustomViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(CustomViewHolder customViewHolder, int i) {
        final Item file = _data.get(i);

        //Setting text view title
        customViewHolder.textView.setText(file._fileName);
        customViewHolder.textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                _listener.onFileClickListener(file._fileName);
            }
        });
//            customViewHolder.textView.setOnTouchListener(new View.OnTouchListener() {
//                @Override
//                public boolean onTouch(View v, MotionEvent event) {
//
//                    switch (event.getActionMasked())
//                    {
//                        case MotionEvent.ACTION_UP:
//                            _listener.onFileClickListener(file._fileName);
//                            break;
//                    }
//                    return false;
//                }
//            });
//            customViewHolder.textView.setOnTouchListener(new View.OnTouchListener() {
//                @TargetApi(Build.VERSION_CODES.LOLLIPOP)
//                @Override
//                public boolean onTouch(View v, MotionEvent event) {
//                    v.getBackground().setHotspot(event.getX(), event.getY());
//
//                    return(false);
//                }
//            });


        if (file._isFolder) {
            customViewHolder.textView.setCompoundDrawablesWithIntrinsicBounds(
                    R.drawable.directory_icon, 0, 0, 0);
        } else {
            customViewHolder.textView.setCompoundDrawablesWithIntrinsicBounds(
                    R.drawable.file_icon, 0, 0, 0);
        }

    }

    @Override
    public int getItemCount() {
        return (null != _data ? _data.size() : 0);
    }



    public class CustomViewHolder extends RecyclerView.ViewHolder
    {
        protected TextView textView;

        public CustomViewHolder(View view) {
            super(view);
            this.textView = (TextView) view.findViewById(R.id.file_name);
        }
    }

    public interface IFileListener
    {
        public void onFileClickListener(String file);
    }


}
公共类RecycleAdapter扩展了RecyclerView.Adapter{ 私有列表数据; 私人语境(private Context)(私人语境);; 私有IFileListener\u侦听器; 公共RecycleAdapter(上下文、列表数据、IFileListener侦听器){ _数据=数据; _上下文=上下文; _监听器=监听器; } 公共无效设置数据(列表数据) { _数据=数据; notifyDataSetChanged(); } @凌驾 公共CustomViewHolder onCreateViewHolder(视图组视图组,int i){ View View=LayoutInflater.from(_context).flate(R.layout.file_项,视图组,false); CustomViewHolder viewHolder=新CustomViewHolder(视图); 返回视图持有者; } @凌驾 BindViewHolder上的公共无效(CustomViewHolder CustomViewHolder,int i){ 最终项目文件=_data.get(i); //设置文本视图标题 customViewHolder.textView.setText(文件名); customViewHolder.textView.setOnClickListener(新视图.OnClickListener(){ @凌驾 公共void onClick(视图v){ _onFileClickListener(文件名); } }); //customViewHolder.textView.setOnTouchListener(新视图.OnTouchListener(){ //@覆盖 //公共布尔onTouch(视图v,运动事件){ // //开关(event.getActionMasked()) // { //case MotionEvent.ACTION\u UP: //_listener.onFileClickListener(文件名); //中断; // } //返回false; // } // }); //customViewHolder.textView.setOnTouchListener(新视图.OnTouchListener(){ //@TargetApi(Build.VERSION\u code.LOLLIPOP) //@覆盖 //公共布尔onTouch(视图v,运动事件){ //v.getBackground().setHotspot(event.getX(),event.getY()); // //返回(假); // } // }); 如果(文件和文件夹){ customViewHolder.textView.SetCompoundDrawable SwithinInstructBounds( R.drawable.directory_图标,0,0,0); }否则{ customViewHolder.textView.SetCompoundDrawable SwithinInstructBounds( R.drawable.file_图标,0,0,0); } } @凌驾 public int getItemCount(){ 返回值(null!=\u data?\u data.size():0); } 公共类CustomViewHolder扩展了RecyclerView.ViewHolder { 受保护的文本视图文本视图; 公共CustomViewHolder(视图){ 超级(视图); this.textView=(textView)view.findViewById(R.id.file\u name); } } 公共接口IFileListener { 公共void onFileClickListener(字符串文件); } }
在这里查看答案:

在onClick方法中(假设在回调中),确保在
notifyItemChanged(position)
之后不调用
notifyDataSetChanged()

notifyDataSetChanged()
将与这些默认涟漪效应冲突

new recyclerAdapter.ClickListener() {
    @Override
    public void onClick(int position) {

        ... awesome item onClick code ...

        notifyItemChanged(position);
        //notifyDataSetChanged(); <//--- Causes the no ripple bug
    }
};
new recyclerAdapter.ClickListener(){
@凌驾
公共void onClick(内部位置){
…很棒的物品点击代码。。。
(职位)变更;
//notifyDataSetChanged();