Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.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 在片段中创建回收器视图?_Java_Android_Sqlite_Android Studio_Fragment - Fatal编程技术网

Java 在片段中创建回收器视图?

Java 在片段中创建回收器视图?,java,android,sqlite,android-studio,fragment,Java,Android,Sqlite,Android Studio,Fragment,我想创建一个片段并在展示产品的回收器视图中… 但是当我渲染它时,它会显示这个错误:RecyclerView:没有连接适配器;跳过布局 下面我复制我的代码 此代码适用于适配器类: private ArrayList<Products> ProductsList; private Context context; public Adapter(ArrayList<Products> productsList, Context context) { Products

我想创建一个片段并在展示产品的回收器视图中…
但是当我渲染它时,它会显示这个错误:RecyclerView:没有连接适配器;跳过布局

下面我复制我的代码

此代码适用于适配器类:

 private ArrayList<Products> ProductsList;
private Context context;

public Adapter(ArrayList<Products> productsList, Context context) {
    ProductsList = productsList;
    this.context = context;
}

@Override
public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(context).inflate(R.layout.row_layout, parent, false);
    return new MyHolder(v);
}

@Override
public void onBindViewHolder(MyHolder holder, final int position) {
    Products products = ProductsList.get(position);

    holder.txtName.setText(products.getName());
    holder.txtPrice.setText("$ " + products.getPrice());
    Picasso.get().load(Config.ipValue + "/images/" + products.getPhoto()).into(holder.imgV);
    holder.imgV.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            v.startAnimation(AnimationUtils.loadAnimation(context, android
                    .R.anim.slide_in_left));
        }
    });

}

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

class MyHolder extends RecyclerView.ViewHolder {

    TextView txtName;
    TextView txtPrice;
    ImageView imgV;

    public MyHolder(View itemView) {
        super(itemView);

        txtName = itemView.findViewById(R.id.rowTxtProductName);
        txtPrice = itemView.findViewById(R.id.rowTxtPrice);
        imgV = itemView.findViewById(R.id.rowImgProduct);
    }
}
私有ArrayList ProductsList;
私人语境;
公共适配器(ArrayList productsList,上下文){
ProductsList=ProductsList;
this.context=上下文;
}
@凌驾
public MyHolder onCreateViewHolder(视图组父级,int-viewType){
视图v=LayoutFlater.from(上下文)。充气(R.layout.row\u布局,父级,false);
归还新的MyHolder(v);
}
@凌驾
公共无效onBindViewHolder(MyHolder,最终整数位置){
Products=ProductsList.get(位置);
holder.txtName.setText(products.getName());
holder.txtPrice.setText(“$”+products.getPrice());
将(Config.ipValue+“/images/”+products.getPhoto())加载到(holder.imgV)中;
holder.imgV.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
v、 startAnimation(AnimationUtils.loadAnimation)(上下文,android
.R.anim.滑入(左);
}
});
}
@凌驾
public int getItemCount(){
返回ProductsList.size();
}
类MyHolder扩展了RecyclerView.ViewHolder{
TextView-txtName;
TextView txtPrice;
ImageView imgV;
公共MyHolder(查看项目视图){
超级(项目视图);
txtName=itemView.findViewById(R.id.RowtProductName);
txtPrice=itemView.findviewbyd(R.id.rowtprice);
imgV=itemView.findviewbyd(R.id.rowImgProduct);
}
}
这是web api类的一个:

public class WebApiHandler {

Context context;
String apiLink = "";
ArrayList<Products> products = new ArrayList<>();

public WebApiHandler(Context context) {
    this.context = context;
}

void apiConnect(String type) {
    switch (type) {
        case "getproducts": {
            apiLink = Config.getProductsWebApi;
            break;
        }
    }

    ProgressDialog dialog = ProgressDialog.show(context, "Connecting...",
            "please wait", false, false);
    StringRequest request = new StringRequest(Request.Method.POST,
            apiLink, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            dialog.dismiss();
            showJson(response);
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            dialog.dismiss();
        }
    });
    RequestQueue queue = Volley.newRequestQueue(context);
    queue.add(request);
}

private void showJson(String response) {
    products.clear();
    try {
        JSONObject jsonObject = new JSONObject(response);
        JSONArray jsonArray = jsonObject.getJSONArray("response");
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject object = jsonArray.getJSONObject(i);
            String id = object.getString("id");
            String name = object.getString("name");
            String description = object.getString("description");
            String price = object.getString("price");
            String photo = object.getString("photo");
            Products p = new Products(id, name, description, price, photo);
            products.add(p);
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
    VerticalFragment.productsArrayList = products;
    IData iData = (IData) context;
    iData.sendData();
}}
公共类webapidhandler{
语境;
字符串apiLink=“”;
ArrayList产品=新的ArrayList();
公共WebApiHandler(上下文){
this.context=上下文;
}
void apiConnect(字符串类型){
开关(类型){
案例“getproducts”:{
apiLink=Config.getProductsWebApi;
打破
}
}
ProgressDialog=ProgressDialog.show(上下文,“连接…”),
“请稍候”,假,假);
StringRequest=新的StringRequest(request.Method.POST,
apiLink,新的Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
dialog.dismise();
showJson(响应);
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
dialog.dismise();
}
});
RequestQueue=Volley.newRequestQueue(上下文);
添加(请求);
}
私有void showJson(字符串响应){
产品;
试一试{
JSONObject JSONObject=新JSONObject(响应);
JSONArray JSONArray=jsonObject.getJSONArray(“响应”);
for(int i=0;i
和我的片段代码:

public class VerticalFragment extends Fragment implements IData {

RecyclerView rcVertical;
WebApiHandler webApiHandler;
static ArrayList<Products> productsArrayList = new ArrayList<>();

public VerticalFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_vertical, container, false);
    rcVertical = view.findViewById(R.id.rcVertical);
    webApiHandler = new WebApiHandler(getContext());
    webApiHandler.apiConnect("getproducts");
    rcVertical.addOnItemTouchListener(new RecyclerTouchListener(getContext(), rcVertical,
            new RecyclerTouchListener.ClickListener() {
                @Override
                public void onClick(View view, int position) {
                    ProductActivity.products = productsArrayList.get(position);
                    startActivity(new Intent(getContext(), ProductActivity.class));
                }

                @Override
                public void onLongClick(View view, int position) {

                }
            }));

    return view;
}

@Override
public void sendData() {
    Adapter adapter = new Adapter(productsArrayList, getContext());
    rcVertical.setLayoutManager(new LinearLayoutManager((getContext())));
    rcVertical.setItemAnimator(new DefaultItemAnimator());
    rcVertical.setAdapter(adapter);
}}
公共类VerticalFragment扩展片段实现IData{
回收视图RCV垂直;
WebApiHandler WebApiHandler;
静态ArrayList productsArrayList=新ArrayList();
公共垂直碎片(){
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图=充气机。充气(R.layout.fragment_垂直,容器,错误);
rcVertical=view.findviewbyd(R.id.rcVertical);
webApiHandler=新的webApiHandler(getContext());
webApiHandler.apiConnect(“getproducts”);
addOnItemTouchListener(新的RecyclerTouchListener(getContext(),rcVertical,
新建RecyclerTouchListener.ClickListener(){
@凌驾
公共void onClick(视图,int位置){
ProductActivity.products=productsArrayList.get(位置);
startActivity(新的意图(getContext(),ProductActivity.class));
}
@凌驾
仅长按公共无效(视图,int位置){
}
}));
返回视图;
}
@凌驾
public void sendData(){
Adapter Adapter=新适配器(productsArrayList,getContext());
rcVertical.setLayoutManager(新的LinearLayoutManager((getContext()));
rcVertical.setItemAnimator(新的DefaultItemAnimator());
rcVertical.setAdapter(适配器);
}}

我应该说我创建了一个接口并有一个方法,我说它sendData

当显示recyclerview时没有连接到recyclerview的适配器时,这是一个常见错误。它不会对您的应用程序造成任何伤害,但您可以通过设置没有数据的空适配器来避免它,稍后当您获得数据时,将其提供给适配器并通知它

编辑-添加示例

在适配器中为列表创建setter。之后,在片段中,使适配器成为全局的,在onCreateView中,使适配器成为实例,并将其附加到recyclerview

adapter = new Adapter(new ArrayList<>(), getContext());
rcVertical.setAdapter(adapter);
...Initialize recyclerview...

您没有调用函数
sendData
,在初始化
rcVertical
@rcs正确后,在
OnCreateView
中显式调用它。调用函数不要担心它的Androids错误,它会一直存在,直到你将
适配器设置到
回收视图
,设置
适配器后它就会消失。我实现了IDat
adapter.setData(productsArrayList);
adapter.notifyDataSetChanged();