项目列表布局显示在 Android Studio 中,但不显示在模拟器中

Item List Layout showing up in Android Studio, but not in Emulator

我正在开发一个 Android 应用程序,其中包含一个包含列表视图的 Recyclerview。问题是,Listview 项目出现在 Android Studio 中,XML 中没有错误,但 Listview 项目仍然没有出现在模拟器或真实设备上。我检查了布局中的各种问题——大小、宽度、布局约束——但我找不到任何问题。由于我被困在这里,我将非常感谢社区的任何帮助或提示,在此先感谢。

Activity:

package com.example.xxx;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.drawable.GradientDrawable;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupMenu;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

import okhttp3.Credentials;

import static com.example.xxx.SimpleItemRecyclerViewAdapter.TAGG;
import static com.example.xxx.SimpleItemRecyclerViewAdapter.palNo;

/**
 * An activity representing a single Main detail screen. This
 * activity is only used on narrow width devices. On tablet-size devices,
 * item details are presented side-by-side with a list of items
 * in a {@link MainListActivity}.
 */
public final class ProductDetailActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener,
        PopupMenu.OnMenuItemClickListener {

    public Context context;
    private RecyclerView recyclerView;
    private StockBookingsRecyclerviewAdapter recyclerviewAdapter;
    private RecyclerTouchListener touchListener;
    public static final String TAG = "Barcode ist:" ;
    public String bookingType = null;
    public String itemNo = null;
    public String ean = null;
    public String quantity = null;
    public String packageCode = null;
    public String target = null;
    public String source = null;
    public Date date;
    public String scannedCode = null;
    public static final String Profile_Prefs = "Pro_File";
    public static SharedPreferences profile;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_product_detail);
        TextView titleBooking = findViewById(R.id.title_booking);
        TextView typeBooking = findViewById(R.id.type_booking);
        TextView nameBooking = findViewById(R.id.name_booking);
        TextView dateBooking = findViewById(R.id.date_booking);
        Toolbar toolbar = findViewById(R.id.toolbar);
        LinearLayout linearLayout = findViewById(R.id.rowFGP);
        String selectedItem =null;

        // Create an ArrayAdapter using the string array and a default spinner layout
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
                R.array.mockdata, android.R.layout.simple_spinner_item);
        // Specify the layout to use when the list of choices appears
        String basic = Credentials.basic("xxx", "xxx");
        // Apply the adapter to the spinner

        recyclerView = findViewById(R.id.recyclerview2);
        recyclerviewAdapter = new StockBookingsRecyclerviewAdapter(this);
        Intent newIntent = getIntent();
        String receivedPalNo =  newIntent.getStringExtra("palNo");
        String receivedNo =  newIntent.getStringExtra("no");
        String receivedType =  newIntent.getStringExtra("type");
        String receivedRack =  newIntent.getStringExtra("rack");
        String receivedCountItems =  newIntent.getStringExtra("count_items");
        RestClient.getStockBookings(getApplicationContext(),recyclerviewAdapter,basic);
        Log.d(TAGG,"Intent 1" + receivedPalNo);
        Log.d(TAGG, "Intent 2" + receivedNo);
        Log.d(TAGG, "Intent 3" + receivedType);
        Log.d(TAGG,"Intent 4" + receivedRack);
        Log.d(TAGG, "Intent 5" + receivedCountItems);

        //use a GradientDrawable with only one color set, to make it a solid color
        GradientDrawable border = new GradientDrawable();
        border.setColor(0x00000000); //white background
        border.setStroke(1, 0xFF000000); //black border with full opacity

        final ArrayList<StockBookings> stockBookingList = new ArrayList<>();

        recyclerviewAdapter. setBookingList((ArrayList<StockBookings>) stockBookingList);
        recyclerView.setAdapter(recyclerviewAdapter);

        touchListener = new RecyclerTouchListener(this,recyclerView);
        StockBookingsRecyclerviewAdapter finalRecyclerviewAdapter = recyclerviewAdapter;
        touchListener
                .setClickable(new RecyclerTouchListener.OnRowClickListener() {
                    @Override
                    public void onRowClicked(int position) {
                    }

                    @Override
                    public void onIndependentViewClicked(int independentViewID, int position) {

                    }
                })
                .setSwipeOptionViews(R.id.delete_task)
                .setSwipeable(R.id.rowFGP, R.id.rowBGP, new RecyclerTouchListener.OnSwipeOptionsClickListener() {
                    @Override
                    public void onSwipeOptionClicked(int viewID, int position) {
                                stockBookingList.remove(position);
                                finalRecyclerviewAdapter.setStockBookingList(stockBookingList);
                    }
                });

    }

    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public void onBackPressed() {
        Intent setIntent = new Intent(getApplicationContext(),MainListActivity.class);
        startActivity(setIntent);
    }


    public boolean onMenuItemClick(MenuItem item) {
        Toast.makeText(this, "Selected Item: " +item.getTitle(), Toast.LENGTH_SHORT).show();
        switch (item.getItemId()) {
            case R.id.search_item:
                // do your code
                return true;
            case R.id.upload_item:
                // do your code
                return true;
            case R.id.copy_item:
                // do your code
                return true;
           /* case R.id.print_item:
                // do your code
                return true;*/
            case R.id.share_item:
                // do your code
                return true;
            /*case R.id.bookmark_item:
                // do your code
                return true;*/
            default:
                return false;
        }
    }

    public void onItemSelected(AdapterView<?> parent, View view,
                               int pos, long id) {
        // An item was selected. You can retrieve the selected item using
        // parent.getItemAtPosition(pos)
    }

    public void onNothingSelected(AdapterView<?> parent) {
        // Another interface callback
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == android.R.id.home) {
            // This ID represents the Home or Up button. In the case of this
            // activity, the Up button is shown. For
            // more details, see the Navigation pattern on Android Design:
            //
            // http://developer.android.com/design/patterns/navigation.html#up-vs-back
            //
            navigateUpTo(new Intent(this, MainListActivity.class));
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onResume() {
        super.onResume();
        recyclerView.addOnItemTouchListener(touchListener);
    }

    @Override
    public void onPointerCaptureChanged(boolean hasCapture) {

    }
}

Activity XML:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:id="@+id/linearLayout"
        android:layout_width="match_parent"
        android:layout_height="@dimen/_80sdp"
        android:layout_marginBottom="12dp"
        android:layout_weight="0.15"
        android:background="@drawable/border_set"
        android:orientation="horizontal"
        app:layout_constraintBottom_toTopOf="@id/recyclerview2">


        <LinearLayout
            android:id="@+id/linearLayout2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <TextView
                android:id="@+id/txt"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:layout_marginTop="20dp"
                android:text="@string/product_bookings"
                android:textColor="@color/black"
                android:textSize="@dimen/_20sdp"
                android:textStyle="bold"
                app:layout_constraintBottom_toTopOf="@+id/txt1"
                app:layout_constraintEnd_toEndOf="@id/txt1" />

            <TextView
                android:id="@+id/txt2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:layout_marginTop="10dp"
                android:text="@string/nicht_uebertragen"
                android:textColor="@color/black"
                android:textSize="@dimen/_10sdp"
                android:textStyle="bold"
                app:layout_constraintBottom_toTopOf="@+id/txt1"
                app:layout_constraintEnd_toEndOf="@id/txt1" />
        </LinearLayout>

    </LinearLayout>


    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerview2"
        android:layout_width="match_parent"
        android:layout_height="@dimen/_280sdp"
        android:layout_weight="0.7"
        tools:itemCount="7"
        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
        app:layout_constraintTop_toBottomOf="@+id/linearLayout"
        tools:listitem="@layout/product_item" />

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/constraintLayout"
        android:layout_width="match_parent"
        android:layout_height="@dimen/_110sdp"
        android:layout_weight="0.15"
        android:gravity="bottom"
        android:padding="5dp"
        app:layout_constraintTop_toBottomOf="@id/recyclerview2"
        tools:layout_editor_absoluteX="0dp">

        <com.google.android.material.floatingactionbutton.FloatingActionButton
            android:id="@+id/floating_action_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom|right"
            android:layout_margin="16dp"
            android:layout_marginStart="5dp"
            android:layout_marginTop="5dp"
            android:contentDescription="@string/fab_content_desc"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:srcCompat="@drawable/ic_add_circle_outline" />

    </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

产品项目XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/background_border"
    android:orientation="vertical">

    <LinearLayout
        android:id="@+id/rowBGP"
        android:background="@color/colorPrimaryDark"
        android:layout_width="wrap_content"
        android:layout_height="60dp"
        android:layout_alignParentRight="true"
        android:gravity="right"
        android:orientation="horizontal">

        <RelativeLayout
            android:id="@+id/delete_task"
            android:layout_width="50dp"
            android:layout_height="match_parent"
            android:clickable="true"
            android:focusable="true"
            android:orientation="vertical">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_centerInParent="true"
                android:gravity="center"
                android:orientation="vertical">

                <TextView
                    android:id="@+id/img_delete"
                    android:layout_width="50dp"
                    android:layout_marginTop="@dimen/_1sdp"
                    android:layout_height="59dp"
                    android:background="@color/light_red"
                    android:text="@string/edit_article"
                    android:textSize="12dp"
                    android:textStyle="bold|italic"
                    app:tint="@android:color/white" />
            </LinearLayout>
        </RelativeLayout>

    </LinearLayout>

    <LinearLayout
        android:id="@+id/rowFGP"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:background="@android:color/white"
        android:clickable="true"
        android:elevation="4dp"
        android:focusable="true"
        android:orientation="horizontal"
        android:layout_margin="1dp"
        android:visibility="visible">

        <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:foreground="?attr/selectableItemBackground">

            <TextView
                android:id="@+id/title_booking"
                style="@style/TextAppearance.AppCompat.Medium"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginEnd="@dimen/_2sdp"
                android:layout_marginBottom="32dp"
                android:lines="1"
                android:text="@string/product_bookings"
                android:textFontWeight="900"
                android:textSize="@dimen/_15sdp"
                android:textStyle="bold|italic"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintVertical_bias="0.888" />

            <TextView
                android:id="@+id/type_booking"
                android:text="@string/booking_type"
                style="@style/TextAppearance.AppCompat.Headline"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="16dp"
                android:textSize="@dimen/_10sdp"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintHorizontal_bias="0.265"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintVertical_bias="0.615" />

            <TextView
                android:id="@+id/name_booking"
                android:text="@string/name_booking"
                style="@style/TextAppearance.AppCompat.Headline"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="24dp"
                android:textSize="@dimen/_15sdp"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintHorizontal_bias="0.265"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintVertical_bias="0.615" />

            <TextView
                android:id="@+id/date_booking"
                android:text="@string/date_booking"
                style="@style/TextAppearance.AppCompat.Medium"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="32dp"
                android:layout_marginEnd="8dp"
                android:lines="1"
                android:textFontWeight="900"
                android:textSize="@dimen/_15sdp"
                android:textStyle="bold"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintVertical_bias="0.888"/>

        </androidx.constraintlayout.widget.ConstraintLayout>

    </LinearLayout>

</RelativeLayout>

设置适配器时,stockBookingList为空。

这意味着当 RecyclerView 决定呈现列表中的项目时,它发现 itemCount 为 0。

这会指示 RecylcerView 不呈现列表中的任何内容,因为它不会调用 onCreateViewHolderonBindViewHolder – 这两种方法负责扩充列表项和设置必要的数据。

如果您有静态项目列表,则需要将它们提供给适配器。

如果列表来自您的 RestClient,您需要在收到来自 API 的数据时更新适配器。