Android 使用片段的recyclerview中没有适配器连接的跳过布局

Android 使用片段的recyclerview中没有适配器连接的跳过布局,android,android-layout,android-fragments,Android,Android Layout,Android Fragments,我在使用片段的回收器视图中出错。我读过stackoverflow的答案,但它不能解决问题。请帮帮我 回收器参考教程 当我在没有片段的情况下使用时,它工作得很好,但在片段中它显示错误。 我的代码如下所示 FriendsFragment.java public class FriendsFragment extends android.support.v4.app.Fragment { List<GetDataAdapter> GetDataAdapter1; Recycler

我在使用片段的回收器视图中出错。我读过stackoverflow的答案,但它不能解决问题。请帮帮我

回收器参考教程

当我在没有片段的情况下使用时,它工作得很好,但在片段中它显示错误。 我的代码如下所示

FriendsFragment.java

public class FriendsFragment extends android.support.v4.app.Fragment {


List<GetDataAdapter> GetDataAdapter1;

RecyclerView recyclerView;

RecyclerView.LayoutManager recyclerViewlayoutManager;

RecyclerView.Adapter recyclerViewadapter;

String GET_JSON_DATA_HTTP_URL = "http://192.168.43.7/work/ecom/2/1.php";
String JSON_IMAGE_TITLE_NAME = "image_title";
String JSON_IMAGE_URL = "image_url";

JsonArrayRequest jsonArrayRequest ;

RequestQueue requestQueue ;

public FriendsFragment() {
    // Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_friends, container, false);

    GetDataAdapter1 = new ArrayList<>();
    recyclerView = (RecyclerView) rootView.findViewById(R.id.recyclerview1);
    recyclerView.setHasFixedSize(true);
    recyclerViewlayoutManager = new LinearLayoutManager(getContext());
    recyclerView.setLayoutManager(recyclerViewlayoutManager);

    JSON_DATA_WEB_CALL();



    // Inflate the layout for this fragment
    return rootView;
}

public void JSON_DATA_WEB_CALL(){

    jsonArrayRequest = new JsonArrayRequest(GET_JSON_DATA_HTTP_URL,

            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {

                    Log.d("LOGTAG", "Response :"+response);

                    JSON_PARSE_DATA_AFTER_WEBCALL(response);
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {

                }
            });

    requestQueue = Volley.newRequestQueue(getContext());

    requestQueue.add(jsonArrayRequest);
}


public void JSON_PARSE_DATA_AFTER_WEBCALL(JSONArray array){

    for(int i = 0; i<array.length(); i++) {

        GetDataAdapter GetDataAdapter2 = new GetDataAdapter();

        JSONObject json = null;
        try {

            json = array.getJSONObject(i);

            GetDataAdapter2.setImageTitleNamee(json.getString(JSON_IMAGE_TITLE_NAME));

            GetDataAdapter2.setImageServerUrl(json.getString(JSON_IMAGE_URL));

        } catch (JSONException e) {

            e.printStackTrace();
        }
        GetDataAdapter1.add(GetDataAdapter2);
    }

    recyclerViewadapter = new RecyclerViewAdapter(GetDataAdapter1, getContext());

    recyclerView.setAdapter(recyclerViewadapter);
}

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
}

@Override
public void onDetach() {
    super.onDetach();
}
}


RecyclerViewAdapter.java

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
Context context;
List<GetDataAdapter> getDataAdapter;
ImageLoader imageLoader1;
public RecyclerViewAdapter(List<GetDataAdapter> getDataAdapter, Context context){

    super();
    this.getDataAdapter = getDataAdapter;
    this.context = context;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_items, parent, false);

    ViewHolder viewHolder = new ViewHolder(v);

    return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder Viewholder, int position) {

    GetDataAdapter getDataAdapter1 =  getDataAdapter.get(position);

    imageLoader1 = ServerImageParseAdapter.getInstance(context).getImageLoader();

    imageLoader1.get(getDataAdapter1.getImageServerUrl(),
            ImageLoader.getImageListener(
                    Viewholder.networkImageView,//Server Image
                    R.mipmap.ic_launcher,//Before loading server image the default showing image.
                    android.R.drawable.ic_dialog_alert //Error image if requested image dose not found on server.
            )
    );

Viewholder.networkImageView.setImageUrl(getDataAdapter1.getImageServerUrl(), imageLoader1);

 Viewholder.ImageTitleNameView.setText(getDataAdapter1.getImageTitleName());

}

@Override
public int getItemCount() {

    return getDataAdapter.size();
}

class ViewHolder extends RecyclerView.ViewHolder{

    public TextView ImageTitleNameView;
    public NetworkImageView networkImageView ;

    public ViewHolder(View itemView) {

        super(itemView);

        ImageTitleNameView = (TextView) itemView.findViewById(R.id.textView_item) ;

        networkImageView = (NetworkImageView) itemView.findViewById(R.id.VollyNetworkImageView1) ;

    }
}
}

fragment_friends.xml

<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"
android:orientation="vertical"
tools:context="com.ecom.fragment2.FriendsFragment">

<android.support.v7.widget.RecyclerView
    android:id="@+id/recyclerview1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />

</RelativeLayout>



recyclerview_items.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/cardview1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
card_view:cardElevation="3dp"
card_view:contentPadding="3dp"
card_view:cardCornerRadius="3dp"
card_view:cardMaxElevation="3dp"
>


<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">

    <com.android.volley.toolbox.NetworkImageView
        android:id="@+id/VollyNetworkImageView1"
        android:layout_width="150dp"
        android:layout_height="100dp"
        android:src="@mipmap/ic_launcher"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Image Name"
        android:id="@+id/textView_item"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@+id/VollyNetworkImageView1"
        android:layout_toEndOf="@+id/VollyNetworkImageView1"
        android:layout_marginLeft="20dp"/>

</RelativeLayout>

</android.support.v7.widget.CardView>
FriendsFragment.java
公共类FriendsFragment扩展了android.support.v4.app.Fragment{
列出GetDataAdapter1;
回收视图回收视图;
RecyclerView.LayoutManager recyclerViewlayoutManager;
适配器RecycleWebAdapter;
字符串GET_JSON_DATA_HTTP_URL=”http://192.168.43.7/work/ecom/2/1.php";
字符串JSON\u IMAGE\u TITLE\u NAME=“IMAGE\u TITLE”;
字符串JSON\u IMAGE\u URL=“IMAGE\u URL”;
JsonArrayRequest JsonArrayRequest;
请求队列请求队列;
公益碎片(){
//必需的空公共构造函数
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
View rootView=充气机。充气(R.layout.fragment\u friends,container,false);
GetDataAdapter1=新的ArrayList();
recyclerView=(recyclerView)rootView.findviewbyd(R.id.recyclerview1);
recyclerView.setHasFixedSize(true);
recyclerViewlayoutManager=新的LinearLayoutManager(getContext());
recyclerView.setLayoutManager(recyclerViewlayoutManager);
JSON_DATA_WEB_CALL();
//为该碎片膨胀布局
返回rootView;
}
public void JSON_DATA_WEB_CALL(){
jsonArrayRequest=新的jsonArrayRequest(获取JSON数据、HTTP URL、,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONArray响应){
Log.d(“LOGTAG”,“Response:”+Response);
JSON在WEBCALL之后解析数据(响应);
}
},
新的Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
}
});
requestQueue=Volley.newRequestQueue(getContext());
add(jsonArrayRequest);
}
public void JSON\u解析\u数据\u WEBCALL之后(JSONArray数组){

对于(int i=0;i您应该创建自定义的linearlayout manager。有时会出现这样的情况:如果您快速滚动,则会导致recycleView中出现异常。要避免此问题,您必须实现自定义布局管理器,如下所示:

public class CustomLinearLayoutManager extends LinearLayoutManager {
private Context mContext;

public CustomLinearLayoutManager(Context context, int orientation,boolean reverseLayout){
    super(context, orientation, reverseLayout);
    mContext=context;
}

@Override
public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
    try {
        super.onLayoutChildren(recycler, state);
    } catch (Exception e) {
        Constants.errorLog("onLayoutChildren :" , e.toString());
    }
}
}

现在在您的recycleview中使用此布局管理器,如下所示:

    LinearLayoutManager recyclerViewlayoutManager = new CustomLinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
    recyclerView.setLayoutManager(recyclerViewlayoutManager );

希望您现在可以避免我提到的异常。

问题是在清单文件中添加权限



它工作正常。

显示了什么错误?发布完整的堆栈跟踪。是否有任何异常?尝试使用相同的代码创建新的片段java文件code@GabeSechan错误显示:E/RecyclerView:未连接适配器;正在跳过layout@MdFazlaRabbiOpu未发现异常检查getDataAdapter.size()了吗?没有得到任何信息请帮助我?请尝试检查JSON_PARSE_DATA_AFTER_WEBCALL(JSONArray数组)方法。您得到响应了吗?没有从JSON_PARSE_DATA_AFTER_WEBCALL(JSONArray数组)得到任何响应
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>