RecyclerView仅显示一项

时间:2018-08-05 21:50:02

标签: android android-recyclerview

我正在尝试构建我的第一个应用程序,而我的recyclerView仅显示json中的第一项。我试图将布局高度更改为wrap_content,但仍无法正常工作

这是recyclerview活动的xml布局

if

cardview 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="wrap_content"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.aleky.carrental.cars">
    <RelativeLayout
        android:id="@+id/relativeLayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        >
    <android.support.v7.widget.RecyclerView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/rv"
        android:clickable="false"
        />
        </RelativeLayout>
</RelativeLayout>

cars.java类,用于将项目加载到recyclerview

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:cardview="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="5dp"
    cardview:cardCornerRadius="2dp"
    cardview:cardElevation="3dp">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#fff"
        android:paddingBottom="15dp">

        <TextView
            android:id="@+id/car_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="2dp"
            android:layout_marginTop="2dp"
            android:fontFamily="sans-serif-smallcaps"
            android:text="Car Name"
            android:textColor="#996515"
            android:textSize="24sp"
            android:textStyle="bold" />

        <com.android.volley.toolbox.NetworkImageView
            android:id="@+id/Car_image"
            android:layout_width="150dp"
            android:layout_height="150dp"
            android:layout_below="@+id/car_name"
            android:layout_marginBottom="2dp"
            android:layout_marginLeft="5dp"
            android:layout_marginTop="2dp" />

        <TextView
            android:id="@+id/tvfeature"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="90dp"
            android:layout_marginTop="25dp"
            android:layout_toRightOf="@+id/car_name"
            android:text="Features"
            android:textColor="#000"
            android:textSize="22sp" />

        <View
            android:layout_width="100dp"
            android:layout_height="1dp"
            android:layout_below="@+id/tvfeature"
            android:layout_marginLeft="20dp"
            android:layout_toRightOf="@+id/Car_image"
            android:background="#000" />

        <ImageView
            android:id="@+id/ac"
            android:layout_width="40dp"
            android:layout_height="20dp"
            android:layout_below="@+id/tvfeature"
            android:layout_marginLeft="20dp"
            android:layout_marginTop="10dp"
            android:layout_toRightOf="@+id/Car_image"
            android:src="@drawable/air_conditioner" />

        <TextView
            android:id="@+id/feature1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/tvfeature"
            android:layout_marginTop="10dp"
            android:layout_toRightOf="@+id/ac"
            android:text="Air conditioner"
            android:textColor="#000"
            android:textSize="16sp" />

        <ImageView
            android:id="@+id/tr"
            android:layout_width="40dp"
            android:layout_height="20dp"
            android:layout_below="@+id/feature1"
            android:layout_marginLeft="20dp"
            android:layout_marginTop="10dp"
            android:layout_toRightOf="@+id/Car_image"
            android:src="@drawable/transmission" />

        <TextView
            android:id="@+id/feature2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/feature1"
            android:layout_marginLeft="2dp"
            android:layout_marginTop="10dp"
            android:layout_toRightOf="@+id/tr"
            android:text="Manual"
            android:textColor="#333333"
            android:textSize="16sp" />

        <ImageView
            android:id="@+id/pass"
            android:layout_width="40dp"
            android:layout_height="20dp"
            android:layout_below="@+id/tr"
            android:layout_marginLeft="20dp"
            android:layout_marginTop="5dp"
            android:layout_toRightOf="@+id/Car_image"
            android:src="@drawable/passengers" />

        <TextView
            android:id="@+id/feature3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/feature2"
            android:layout_marginLeft="5dp"
            android:layout_marginTop="5dp"
            android:layout_toRightOf="@id/pass"
            android:text="6 Passengers"
            android:textColor="#333333"
            android:textSize="16sp" />

        <TextView
            android:id="@+id/pricetxt"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/Car_image"
            android:text="Price :"
            android:textColor="#333333"
            android:textSize="22sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/car_price"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/Car_image"
            android:layout_marginLeft="2dp"
            android:layout_toRightOf="@+id/pricetxt"
            android:text="KSH.2000"
            android:textColor="#996515"
            android:textSize="22sp" />

        <TextView
            android:id="@+id/organiser"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/pricetxt"
            android:layout_marginTop="5dp"
            android:text="Owner :"
            android:textColor="#333333"
            android:textSize="14sp" />

        <TextView
            android:id="@+id/crAgent"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/pricetxt"
            android:layout_marginLeft="2dp"
            android:layout_marginTop="5dp"
            android:layout_toEndOf="@+id/organiser"
            android:layout_toRightOf="@+id/organiser"
            android:text="Supercars Rentals"
            android:textColor="#05056c"
            android:textSize="14sp" />

        <Button
            android:id="@+id/btn_rent"
            style="@style/AppTheme.ButtonCorners"
            android:layout_width="150dp"
            android:layout_height="40dp"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true"
            android:layout_below="@+id/Car_image"
            android:layout_marginRight="12dp"
            android:clickable="true"
            android:text="Rent"
            android:textColor="#eef525" />

        <TextView
            android:id="@+id/car_id"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:visibility="invisible" />
    </RelativeLayout>
</android.support.v7.widget.CardView>

最后是我的适配器类

   public class cars extends AppCompatActivity {
    String url = "http://192.168.43.201/Car_rental/retrievecars.php";
    Context context = null;
    ProgressDialog dialog;
    private List<CarsItem> array_cars = new ArrayList<>();
    AdapterClass adapter;
    NetworkImageView carsImageview;
    private String user_Location = "cLocation";
    private String Category = "category";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_cars);
        adapter = new AdapterClass(cars.this, array_cars);
        RecyclerView recycler = (RecyclerView) findViewById(R.id.rv);
        recycler.setHasFixedSize(true);
        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        recycler.setLayoutManager(layoutManager);
        recycler.setItemAnimator(new DefaultItemAnimator());
        recycler.setAdapter(adapter);
        setCars();
        recycler.addOnItemTouchListener(new RecyclerTouchListener(this, recycler, new ClickListener() {

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


            }

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

            }
        }));


    }

    public void setCars() {
        dialog = new ProgressDialog(this);
        dialog.setMessage("Loading cars...");
        dialog.show();

        if (array_cars != null) {
            array_cars.clear();
        }
        StringRequest request = new StringRequest(Request.Method.POST, url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String s) {
                        try {
                            hideDialog();
                            Log.d("Sever Message", s);

                            JSONObject cars = new JSONObject(s);

                            JSONArray jsonArray = cars.getJSONArray("Cars");
                            JSONObject jobject = null;
                            int len = jsonArray.length();

                            for (int i = 0; i < len; i++) {

                                jobject = jsonArray.getJSONObject(i);
                                CarsItem carsdata = new CarsItem();
                                carsdata.setId(jobject.getString("0"));
                                carsdata.setCarname(jobject.getString("1"));
                                carsdata.setImages(jobject.getString("car_image"));
                                carsdata.setfeature1(jobject.getString("5"));

                                carsdata.setfeature2(jobject.getString("6"));
                                carsdata.setfeature3(jobject.getString("7"));
                                carsdata.setPrice(jobject.getString("8"));
                                array_cars.add(carsdata);
                            }

                            adapter.notifyDataSetChanged();

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {

            }
        }) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {

                //Getting Image Location & category
                String Location = "";
                String Ccategory = "cars";

                //Creating parameters
                Map<String, String> params = new Hashtable<String, String>();

                //Adding parameters
                params.put(Category, Ccategory);
                params.put(user_Location, Location);

                //returning parameters
                return params;
            }
        };
        //RequestQueue requestQueue = Volley.newRequestQueue(this);
        //Adding our request to the queue
        // requestQueue.add(request);
        AppController.getmInstance().addToRequestQueue(request);
    }

    public void hideDialog() {
        if (dialog != null) {
            dialog.dismiss();
            dialog = null;
        }
    }

    public interface ClickListener {
        void onClick(View view, int position);

        void onLongClick(View view, int position);
    }

    public static class RecyclerTouchListener implements RecyclerView.OnItemTouchListener {

        GestureDetector gestureDetector;
        cars.ClickListener clickListener;

        public RecyclerTouchListener(Context context, final RecyclerView recyclerView, final cars.ClickListener clickListener) {
            this.clickListener = clickListener;
            gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
                @Override
                public boolean onSingleTapUp(MotionEvent e) {
                    return true;
                }

                @Override
                public void onLongPress(MotionEvent e) {
                    View child = recyclerView.findChildViewUnder(e.getX(), e.getY());
                    if (child != null && clickListener != null) {
                        clickListener.onLongClick(child, recyclerView.getChildPosition(child));
                    }
                }
            });
        }

        @Override
        public boolean onInterceptTouchEvent(RecyclerView recycler, MotionEvent e) {

            View child = recycler.findChildViewUnder(e.getX(), e.getY());
            if (child != null && clickListener != null && gestureDetector.onTouchEvent(e)) {
                clickListener.onClick(child, recycler.getChildPosition(child));
            }
            return false;
        }

        @Override
        public void onTouchEvent(RecyclerView recycler, MotionEvent e) {
        }

        @Override
        public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

        }

    }

}

3 个答案:

答案 0 :(得分:1)

我认为问题是您没有将元素添加到适配器中。创建适配器后,您需要在适配器中有一种方法来添加项目。在该方法内部,您需要通知。示例:

void addItems(List<CarItem> carItems){
   Array_cars.addAll(carItems);
   notifyDataSetChanged();
}

但是,我会走得更远,找到项目数,并尝试仅通知新插入的项目(以防万一)。 可以这样做:

void addItems(List<CarItem> carItems){
    int position = Array_cars.size();
    Array_cars.addAll(carItems);
    notifyItemRangeChanged(position, Array_cars.size() - position);
}

编辑

看下面的例子: RecycleView

答案 1 :(得分:-1)

这是recyclerview活动的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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.aleky.carrental.cars">
    <RelativeLayout
        android:id="@+id/relativeLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/rv"
        android:clickable="false"
        />
        </RelativeLayout>
</RelativeLayout>

答案 2 :(得分:-1)

您已添加match_parent的“ RecyclerView”高度,请更改为wrap_content。

<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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.aleky.carrental.cars">
    <RelativeLayout
        android:id="@+id/relativeLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/rv"
        android:clickable="false"
        />
        </RelativeLayout>
</RelativeLayout>