Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.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 如何在“中迁移我的代码”;onCreateViewHolder“;至;onBindViewHolder";_Android_Android Recyclerview - Fatal编程技术网

Android 如何在“中迁移我的代码”;onCreateViewHolder“;至;onBindViewHolder";

Android 如何在“中迁移我的代码”;onCreateViewHolder“;至;onBindViewHolder";,android,android-recyclerview,Android,Android Recyclerview,这是我在onCreateViewHolder中的代码 有人告诉我,在那里写不是一个好习惯,它应该在onBindViewHolder中 尽管我在网上看了一些例子,但我似乎不知道如何正确地完成它 那么,我应该如何处理这个问题呢?onCreateViewHolder()应该包含创建ViewHolder的代码,并且onBindViewHolder()应该用数据填充它。当集合包含许多元素并由用户滚动时,任何其他方法都会导致问题 就我所见,在您的例子中,无论CAT\u IMAGE\u id.get(I).g

这是我在onCreateViewHolder中的代码

有人告诉我,在那里写不是一个好习惯,它应该在onBindViewHolder中

尽管我在网上看了一些例子,但我似乎不知道如何正确地完成它


那么,我应该如何处理这个问题呢?

onCreateViewHolder()应该包含创建ViewHolder的代码,并且
onBindViewHolder()应该用数据填充它。当集合包含许多元素并由用户滚动时,任何其他方法都会导致问题

就我所见,在您的例子中,无论
CAT\u IMAGE\u id.get(I).getButton()
CAT\u IMAGE\u id.get(I).getDummy()的值是多少,创建的布局都是一样的。这意味着
onBindViewHolder()
的主体应该如下所示:

ViewGroup viewGroup = (ViewGroup) LayoutInflater.from(parent.getContext()).inflate(R.layout.widget_holder, parent, false);
LinearLayout ln = new LinearLayout(parent.getContext());
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(230, 250, Gravity.CENTER);
ln.setLayoutParams(params);
viewGroup.addView(ln);
return new ItemViewHolder(viewGroup);
请注意,我只留下了实际创建布局的代码,而没有留下设置可见性的部分-应该在
onBindViewHolder()中完成


通常,onBindViewHolder()的
onBindViewHolder()
不仅仅用于更改元素的可见性,例如,用文本和图片填充视图


您可以获取更多信息。

这里缺少的逻辑只是利用这种方法并相应地回收您的视图。请看以下示例代码:

package yourpackage.goeshere;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import yourpackage.goeshere.R;

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

    //region Vars
    private List<Object> mListObjects;
    private LayoutInflater mInflater;
    private Context context;
    //endregion 

    //region Constructor
    public SampleRecyclerViewAdapter2(@NonNull Context context){
        this.context = context;
        this.mInflater = LayoutInflater.from(this.context);
    }

    //endregion

    //region Initialization
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = mInflater.inflate(R.layout.your_layout_file_here, parent, false);
        SampleRecyclerViewAdapter2.AdapterHolderType viewHolder2 = new SampleRecyclerViewAdapter2.AdapterHolderType(view);
        return viewHolder2;
    }
    //endregion

    //region Override Methods
    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder0, final int position) {

        final Object nonCastObject = mListObjects.get(position);
        if(nonCastObject == null){
            //Decide what to do here
            return;
        }

        //Cast the Holder Here
        SampleRecyclerViewAdapter2.AdapterHolderType holder = (SampleRecyclerViewAdapter2.AdapterHolderType) holder0;

        //Cast the Object Here to your pojo
//      MyCustomObject obj = (MyCustomObject) nonCastObject;

        //Set Fields here; adjust dynamically from cast object
        holder.adapter_sample_recyclerview_iv.setImageResource(R.mipmap.ic_launcher);
        holder.adapter_sample_recyclerview_tv.setText("Some text");

        //Set listeners here
        holder.rootview.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Can set a click listener here if need be
            }
        });

        //Handle animations here if you want them
    }

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

    //endregion

    //region Class Methods

    /**
     * Add one object to the list
     * @param position Position to add into
     * @param mObject Single object to update. If null, will be ignored (Call remove instead).
     *                {@link Object}
     */
    public void addOneObject(int position, Object mObject){
        if(mObject == null){
            return;
        }
        if(position < 0 || position > getItemCount()){
            //Out of bounds
            return;
        }
        if(this.mListObjects == null){
            this.mListObjects = new ArrayList<>();
        }
        this.mListObjects.add(position, mObject);
        this.notifyItemChanged(position);
    }

    /**
     * Update one object in the list
     * @param position Position to update
     * @param mObject Single object to update. If null, will be ignored (Call remove instead).
     *                {@link Object}
     */
    public void updateOneObject(int position, Object mObject){
        if(mObject == null){
            return;
        }
        if(position < 0 || position >= getItemCount()){
            //Out of bounds
            return;
        }
        this.mListObjects.set(position, mObject);
        this.notifyItemChanged(position);
    }

    /**
     * Remove a single object from the list
     * @param position Position to remove
     */
    public void removeOneObject(int position){
        if(this.mListObjects != null){
            if(position < 0 || position >= getItemCount()){
                this.mListObjects.remove(position);
                this.notifyItemChanged(position);
            }
        }
    }

    /**
     * Set data list
     * @param mListObjects {@link Object}
     */
    public void setListObjects(List<Object> mListObjects){
        this.mListObjects = mListObjects;
        this.notifyDataSetChanged();
    }
    //endregion

    //region Class Holders

    class AdapterHolderType extends RecyclerView.ViewHolder {

        ImageView adapter_sample_recyclerview_iv;
        RelativeLayout rootview;
        TextView adapter_sample_recyclerview_tv;

        public AdapterHolderType(View itemView) {
            super(itemView);
            this.adapter_sample_recyclerview_tv = itemView.findViewById(R.id.adapter_sample_recyclerview_tv);
            this.rootview = itemView.findViewById(R.id.rootview);
            this.adapter_sample_recyclerview_iv = itemView.findViewById(R.id.adapter_sample_recyclerview_iv);
        }
    }

    //endregion
}
package yourpackage.goesher;
导入android.content.Context;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ImageView;
导入android.widget.RelativeLayout;
导入android.widget.TextView;
导入java.util.ArrayList;
导入java.util.List;
导入androidx.annotation.NonNull;
导入androidx.recyclerview.widget.recyclerview;
导入您的包;
公共类SampleRecyclerViewAdapter2扩展了RecyclerView.Adapter{
//区域变量
私有列表mListObjects;
私人停车场;
私人语境;
//端区
//区域构造函数
公共采样器ECyclServiceAdapter2(@NonNull上下文){
this.context=上下文;
this.mInflater=LayoutInflater.from(this.context);
}
//端区
//区域初始化
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
View View=mInflater.inflate(R.layout.your\u layout\u file\u here,parent,false);
SampleRecyclServiceAdapter2.AdapterHolderType视图持有者2=新SampleRecyclServiceAdapter2.AdapterHolderType(视图);
返回viewHolder2;
}
//端区
//区域覆盖方法
@凌驾
BindViewHolder上的公共无效(RecyclerView.ViewHolder holder0,最终int位置){
最终对象nonCastObject=mListObjects.get(位置);
if(nonCastObject==null){
//决定在这里做什么
返回;
}
//把支架放在这里
SamplerCyclerServiceAdapter2.AdapterHolderType持有者=(SamplerCyclerServiceAdapter2.AdapterHolderType)持有者0;
//将此对象投射到您的pojo
//MyCustomObject obj=(MyCustomObject)非CastObject;
//在此处设置字段;根据强制转换对象动态调整
holder.adapter\u sample\u recyclerview\u iv.setImageResource(R.mipmap.ic\u启动器);
holder.adapter\u sample\u recyclerview\u tv.setText(“一些文本”);
//在此处设置侦听器
holder.rootview.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//如果需要,可以在此处设置单击侦听器
}
});
//如果需要,请在此处处理动画
}
@凌驾
public int getItemCount(){
返回((this.mListObjects==null)?0:this.mListObjects.size();
}
//端区
//区域类方法
/**
*将一个对象添加到列表中
*@param position要添加到的位置
*@param mObject要更新的单个对象。如果为null,将被忽略(改为调用remove)。
*{@link Object}
*/
public void addOneObject(int位置,Object mObject){
if(mObject==null){
返回;
}
如果(位置<0 | |位置>getItemCount()){
//出界
返回;
}
if(this.mListObjects==null){
this.mListObjects=新的ArrayList();
}
this.mListObjects.add(position,mObject);
此项变更(位置);
}
/**
*更新列表中的一个对象
*@param-position要更新的位置
*@param mObject要更新的单个对象。如果为null,将被忽略(改为调用remove)。
*{@link Object}
*/
public void updateOneObject(int位置,Object mObject){
if(mObject==null){
返回;
}
如果(位置<0 | |位置>=getItemCount()){
//出界
返回;
}
this.mListObjects.set(位置,mObject);
此项变更(位置);
}
/**
*从列表中删除单个对象
*@param-position要删除的位置
*/
public void removeOneObject(int位置){
if(this.mListObjects!=null){
如果(位置<0 | |位置>=getItemCount()){
此.mListObjects.remove(位置);
此项变更(位置);
}
}
}
/**
*设置数据列表
*@param mListObjects{@link Object}
*/
public void setListObjects(列表mlistObject){
this.mListObjects=mListObjects;
this.notifyDataSetChanged();
}
//端区
//地区级持有人
类AdapterHolderType扩展了RecyclerView.ViewHolder{
ImageView适配器\u样本\u回收视图\u iv;
相对论根视图;
TextView适配器\u示例\u回收
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    if (CAT_IMAGE_IDS.get(position).getButton()){
        holder.itemView.setVisibility(View.VISIBLE);
    } else if (CAT_IMAGE_IDS.get(position).getDummy()){
        holder.itemView.setVisibility(View.INVISIBLE);
    }
}
package yourpackage.goeshere;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import yourpackage.goeshere.R;

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

    //region Vars
    private List<Object> mListObjects;
    private LayoutInflater mInflater;
    private Context context;
    //endregion 

    //region Constructor
    public SampleRecyclerViewAdapter2(@NonNull Context context){
        this.context = context;
        this.mInflater = LayoutInflater.from(this.context);
    }

    //endregion

    //region Initialization
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = mInflater.inflate(R.layout.your_layout_file_here, parent, false);
        SampleRecyclerViewAdapter2.AdapterHolderType viewHolder2 = new SampleRecyclerViewAdapter2.AdapterHolderType(view);
        return viewHolder2;
    }
    //endregion

    //region Override Methods
    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder0, final int position) {

        final Object nonCastObject = mListObjects.get(position);
        if(nonCastObject == null){
            //Decide what to do here
            return;
        }

        //Cast the Holder Here
        SampleRecyclerViewAdapter2.AdapterHolderType holder = (SampleRecyclerViewAdapter2.AdapterHolderType) holder0;

        //Cast the Object Here to your pojo
//      MyCustomObject obj = (MyCustomObject) nonCastObject;

        //Set Fields here; adjust dynamically from cast object
        holder.adapter_sample_recyclerview_iv.setImageResource(R.mipmap.ic_launcher);
        holder.adapter_sample_recyclerview_tv.setText("Some text");

        //Set listeners here
        holder.rootview.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Can set a click listener here if need be
            }
        });

        //Handle animations here if you want them
    }

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

    //endregion

    //region Class Methods

    /**
     * Add one object to the list
     * @param position Position to add into
     * @param mObject Single object to update. If null, will be ignored (Call remove instead).
     *                {@link Object}
     */
    public void addOneObject(int position, Object mObject){
        if(mObject == null){
            return;
        }
        if(position < 0 || position > getItemCount()){
            //Out of bounds
            return;
        }
        if(this.mListObjects == null){
            this.mListObjects = new ArrayList<>();
        }
        this.mListObjects.add(position, mObject);
        this.notifyItemChanged(position);
    }

    /**
     * Update one object in the list
     * @param position Position to update
     * @param mObject Single object to update. If null, will be ignored (Call remove instead).
     *                {@link Object}
     */
    public void updateOneObject(int position, Object mObject){
        if(mObject == null){
            return;
        }
        if(position < 0 || position >= getItemCount()){
            //Out of bounds
            return;
        }
        this.mListObjects.set(position, mObject);
        this.notifyItemChanged(position);
    }

    /**
     * Remove a single object from the list
     * @param position Position to remove
     */
    public void removeOneObject(int position){
        if(this.mListObjects != null){
            if(position < 0 || position >= getItemCount()){
                this.mListObjects.remove(position);
                this.notifyItemChanged(position);
            }
        }
    }

    /**
     * Set data list
     * @param mListObjects {@link Object}
     */
    public void setListObjects(List<Object> mListObjects){
        this.mListObjects = mListObjects;
        this.notifyDataSetChanged();
    }
    //endregion

    //region Class Holders

    class AdapterHolderType extends RecyclerView.ViewHolder {

        ImageView adapter_sample_recyclerview_iv;
        RelativeLayout rootview;
        TextView adapter_sample_recyclerview_tv;

        public AdapterHolderType(View itemView) {
            super(itemView);
            this.adapter_sample_recyclerview_tv = itemView.findViewById(R.id.adapter_sample_recyclerview_tv);
            this.rootview = itemView.findViewById(R.id.rootview);
            this.adapter_sample_recyclerview_iv = itemView.findViewById(R.id.adapter_sample_recyclerview_iv);
        }
    }

    //endregion
}