简体   繁体   English

RecyclerView onCreateViewHolder未被调用

[英]RecyclerView onCreateViewHolder not being called

i want to add data inside RecyclerView .After done compiled, RecyclerView not showed inside virtual mobile.When i check again, onCreateViewHolder is not being called.Hope you guys can help me solve this problem. 我想在RecyclerView添加数据。完成编译后, RecyclerView不会在虚拟手机中显示。当我再次检查时,不会调用onCreateViewHolder希望你们可以帮助我解决这个问题。

activity_main.xml activity_main.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"
    tools:context="com.example.user.mycustomvolley.MainActivity">

   <android.support.v7.widget.RecyclerView
       android:layout_width="match_parent"
       android:layout_height="100dp"
       android:id="@+id/recyclerview"
       >

   </android.support.v7.widget.RecyclerView>
</RelativeLayout>

row_list.xml row_list.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="8dp"
    android:background="#BBDEFB"
    >

    <com.android.volley.toolbox.NetworkImageView
        android:layout_width="150dp"
        android:layout_height="150dp"
        android:layout_alignParentLeft="true"
        android:layout_margin="8dp"
        android:id="@+id/networkImage"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textName"
        android:text="@string/title"
        android:layout_toRightOf="@+id/networkImage"
        android:padding="8dp"
        android:textColor="@color/colorText"
        android:textSize="18dp"
        android:textStyle="bold"/>

</RelativeLayout>

MainActivity.java MainActivity.java

package com.example.user.mycustomvolley;

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

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    RecyclerView recyclerView;
    RecyclerView.Adapter adapter;
    RecyclerView.LayoutManager layoutManager;
    ArrayList<ArtInformation> arrayList = new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
        recyclerView.setHasFixedSize(true);

        layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);


        BackgroundTask backgroundTask = new BackgroundTask(MainActivity.this);
        arrayList = backgroundTask.getArrayList();
        adapter = new RecyclerAdapter(arrayList,this);
        recyclerView.setAdapter(adapter);

    }
}

BackgroundTask.java BackgroundTask.java

package com.example.user.mycustomvolley;

import android.app.ProgressDialog;
import android.content.Context;
import android.util.Log;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonArrayRequest;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;

/**
 * Created by User on 9/17/2016.
 */
public class BackgroundTask {
    Context context;
    ArrayList<ArtInformation> arrayList = new ArrayList<>();
    private static final String json_url = "http://192.168.1.7/volley/imagetext/getData.php";

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

    public ArrayList<ArtInformation> getArrayList(){

        //make json request.
        JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.POST,json_url,(String) null, new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {

                int count = 0;
                while (count < response.length()) {
                    try{
                        JSONObject jsonObject = response.getJSONObject(count);
                        String artTemp = jsonObject.getString("art");
                        String imageTemp = jsonObject.getString("image");

                        ArtInformation artInformation = new ArtInformation(artTemp,imageTemp);
                        arrayList.add(artInformation);
                        count++;

                    }catch (JSONException ex){
                        ex.printStackTrace();
                    }
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Toast.makeText(context,"Error:[JSON Process",Toast.LENGTH_LONG).show();
                //progressDialog.hide();
                error.printStackTrace();
            }
        });
        MySingleton.getmInstances(context).addToRequestQueue(jsonArrayRequest);
        return arrayList;
    }


}

RecyclerAdapter.java RecyclerAdapter.java

package com.example.user.mycustomvolley;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.NetworkImageView;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by User on 9/17/2016.
 */
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.MyViewHolder> {

    ArrayList<ArtInformation> arrayList = new ArrayList<>();
    Context context;
    private ImageLoader imageLoader;

    public RecyclerAdapter(ArrayList<ArtInformation> list, Context context){
        super();
        this.arrayList = list;
        this.context = context;

    }
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        Log.d("","call onCreateViewHolder");
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_list,parent,false);
        MyViewHolder myViewHolder = new MyViewHolder(view);

        return myViewHolder;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {

        ArtInformation artInformation = arrayList.get(position);
       // Log.d("Check:","art:"+artInformation.getArt_name()+" / path:"+artInformation.getImage_path());
        imageLoader = MySingleton.getmInstances(context).getImageLoader();
        imageLoader.get(artInformation.getImage_path(), ImageLoader.getImageListener(holder.image, R.mipmap.ic_launcher, android.R.drawable.ic_dialog_alert));

        holder.image.setImageUrl(artInformation.getImage_path(),imageLoader);
        holder.artName.setText(artInformation.getArt_name());

    }

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

    public static class MyViewHolder extends  RecyclerView.ViewHolder{
        TextView artName;
        NetworkImageView image;


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

            artName = (TextView) itemView.findViewById(R.id.textName);
            image = (NetworkImageView) itemView.findViewById(R.id.networkImage);


        }

    }

}

如果getItemCount方法返回0,即arrayList.size() == 0RecyclerView永远不会尝试实例化视图。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 尽管回收了所有视图,还是调用了Recyclerview onCreateViewHolder? - Recyclerview onCreateViewHolder being called despite all views being recycled? FirebaseRecyclerAdapter &lt;&gt;不会调用OnCreateViewHolder - OnCreateViewHolder is not being called for the FirebaseRecyclerAdapter<> RecyclerView中没有调用适配器的onCreateViewHolder和onBindViewHolder方法? - Adapter onCreateViewHolder and onBindViewHolder methods are not getting called in RecyclerView? 使用DPAD快速滚动时,RecyclerView onCreateViewHolder过度调用 - RecyclerView onCreateViewHolder called excessively when scrolling fast with DPAD RecyclerView onCreateViewHolder 方法未调用 - RecyclerView onCreateViewHolder method not calling Recyclerview 不调用 onCreateViewHolder - Recyclerview not call onCreateViewHolder RecyclerView 不调用 onCreateViewHolder 或 onBindView - RecyclerView not calling onCreateViewHolder or onBindView RecyclerView onCreateViewHolder位置背景颜色 - RecyclerView onCreateViewHolder position background Color 在棉花糖(6.0+)设备上的onCreateViewHolder方法中夸大RecyclerView项的布局时引发“ android.view.InflateException” - “android.view.InflateException” being thrown on inflating RecyclerView item's layout in onCreateViewHolder method on Marshmallow(6.0+) devices 更新RecyclerView适配器项而不调用OnCreateViewHolder - Update RecyclerView adapter item without calling OnCreateViewHolder
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM