简体   繁体   English

Android Studio RecyclerView:为什么总是(没有附加适配器;跳过布局)

[英]Android Studio RecyclerView: Why always ( No adapter attached; skipping layout )

I am a student who currently taking mobile application development.我是一名学生,目前正在学习移动应用程序开发。 Although my app can run but it doesnt show any activity instead of just give me W/RecyclerView: No adapter attached;虽然我的应用程序可以运行,但它没有显示任何活动,而不仅仅是给我 W/RecyclerView: No adapter attach; skipping layout.跳过布局。 I dont know how to solve the issue, so I was hoping can get some guidlines from experts.我不知道如何解决这个问题,所以我希望能从专家那里得到一些指导。

Here is my code MainActivity.java这是我的代码 MainActivity.java

package my.edu.utar.practicalassignment;

import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class MainActivity extends AppCompatActivity {

    private Toolbar tool;
    private TextView textView;
    private RecyclerView recyclerView;
    private Button AddBtn;
    RecyclerView.LayoutManager layoutManager;


    private FirebaseAuth auth;
    private DatabaseReference ref;
    private String userID  = "";
    private ProgressDialog progressDialog;





    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tool = findViewById(R.id.toolbar);
        setSupportActionBar(tool);
        //getSupportActionBar().setTitle("Today's Spending");

        textView=findViewById(R.id.totalCashBack);
        recyclerView =findViewById(R.id.recycle_view);
//        recyclerView =(RecyclerView)findViewById(R.id.recycleView);
//        layoutManager = new LinearLayoutManager(this);
//        recyclerView.setLayoutManager(layoutManager);

        AddBtn = findViewById(R.id.add_new);


        auth = FirebaseAuth.getInstance();
        userID = auth.getCurrentUser().getUid();
        ref = FirebaseDatabase.getInstance().getReference().child("expenses").child(userID);


//        if(userID !=null){
//            try{
//                ref = FirebaseDatabase.getInstance().getReference().child("expenses").child(userID);
//
//            }catch (NullPointerException ex){
//                ex.printStackTrace();
//            }
//        }

        progressDialog = new ProgressDialog(this);

        AddBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                addItem();
            }
        });



    }


    private void addItem() {
        AlertDialog.Builder alert = new AlertDialog.Builder(this);
        LayoutInflater layout = LayoutInflater.from(this);

        View view = layout.inflate(R.layout.input_layout, null);
        alert.setView(view);

        final AlertDialog dialog = alert.create();
        dialog.setCancelable(false);

        final Spinner spinnerItem = view.findViewById(R.id.spinner);
        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, getResources().getStringArray(R.array.category));
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinnerItem.setAdapter(adapter);

        final EditText amount = view.findViewById(R.id.insert_amount);
        final EditText notes = view.findViewById(R.id.insert_note);
        final Button saveButton = view.findViewById(R.id.add_button);
        final Button cancelButton = view.findViewById(R.id.cancel_button);

        saveButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String amountGet = amount.getText().toString();
                String notesGet = notes.getText().toString();
                String categoryGet = spinnerItem.getSelectedItem().toString();

                Drawable icon = getResources().getDrawable(R.drawable.error);

                if(amountGet.isEmpty()){
                    amount.setError("Please enter an amount!!!", icon );
                    return;
                }

                if(notesGet.isEmpty()){
                    notes.setError("Please enter a notes!!!", icon );
                    return;
                }

                if(categoryGet.equals("Select a Category")){
                    Toast.makeText(MainActivity.this, "Please select a valid category", Toast.LENGTH_SHORT).show();
                }
                else{
                    progressDialog.setMessage("Had added the information into database");
                    progressDialog.setCanceledOnTouchOutside(false);
                    progressDialog.show();

                    String id = ref.push().getKey();

                    DateFormat format = new SimpleDateFormat("dd-MM-yyyy");
                    Calendar calendar = Calendar.getInstance();
                    String date = format.format(calendar.getTime());

                    Data inform = new Data(categoryGet, date, id, notesGet, Integer.parseInt(amountGet));
                    ref.child(id).setValue(inform).addOnCompleteListener(new OnCompleteListener<Void>() {
                        @Override
                        public void onComplete(@NonNull Task<Void> task) {
                            if(task.isSuccessful()){
                                Toast.makeText(MainActivity.this, "Information added successfully", Toast.LENGTH_SHORT).show();
                            }else{
                                Toast.makeText(MainActivity.this, "Fail to add the information", Toast.LENGTH_SHORT).show();
                            }
                            progressDialog.dismiss();
                        }
                    });
                }
                dialog.dismiss();

            }
        });

        cancelButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                dialog.dismiss();
            }
        });



    }
}

MainActivity.xml MainActivity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:background="#000"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#ffff00"
            android:elevation="4dp" />

        <TextView
            android:id="@+id/totalCashBack"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dp"
            android:gravity="center"
            android:text=" Total Cash Back = RM 0"
            android:textColor="#fff"
            android:textSize="20sp"
            android:textStyle="bold" />

        <androidx.coordinatorlayout.widget.CoordinatorLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/recycle_view"
                android:layout_width="match_parent"
                android:layout_height="556dp" />


        </androidx.coordinatorlayout.widget.CoordinatorLayout>


    </LinearLayout>

    <Button
        android:id="@+id/add_new"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="16dp"
        android:backgroundTint="#ffff00"
        android:text="Add"
        app:fabSize="normal" />

</LinearLayout>

InputLayout.xml输入布局.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:elevation="10dp"
    app:cardElevation="10dp"
    android:layout_margin="10dp"
    android:orientation="vertical"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:background="#000"
        android:layout_margin="10dp">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:gravity="center">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="What did you had spend on ?"
                android:gravity="center"
                android:textColor="#fff"
                android:textStyle="bold"
                android:layout_margin="5dp"
                android:textSize="20sp"/>


        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <Spinner
                android:id="@+id/spinner"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:background="#ffff00"
                android:entries="@array/category"/>

            <EditText
                android:id="@+id/insert_amount"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Please enter a amount:"
                android:textColor="#fff"
                android:inputType="number"
                android:textColorHint="#fff"/>

            <EditText
                android:id="@+id/insert_note"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Please enter a note:"
                android:textColor="#fff"
                android:textColorHint="#fff"/>


        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <RelativeLayout
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1">

                <Button
                    android:id="@+id/cancel_button"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="Cancel"
                    android:textAllCaps="false"
                    android:textColor="#000"
                    android:textStyle="bold"
                    android:background="#fff"
                    android:layout_margin="2dp"/>

            </RelativeLayout>

            <RelativeLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1">

            <Button
                android:id="@+id/add_button"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Add Transaction"
                android:textAllCaps="false"
                android:textColor="#000"
                android:textStyle="bold"
                android:background="#ffff00"
                android:layout_margin="2dp"/>

        </RelativeLayout>



        </LinearLayout>



    </LinearLayout>




</androidx.cardview.widget.CardView>

strings.xml字符串.xml

<resources>
    <string name="app_name">PracticalAssignment</string>
    <string-array name="category">
        <item>Select a category</item>
        <item>Petrol Spend</item>
        <item>Groceries Spend</item>
        <item>eWallet Transaction</item>
        <item>Other Eligible Spend</item>

    </string-array>

</resources>

You have to create an adapter class and add with your recycler view.您必须创建一个适配器类并添加您的回收站视图。 The basic snippet to set adapter to recycler view is like bellow将适配器设置为回收器视图的基本片段如下所示

YourAdater adapter = YourAdater();
layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(adapter);

for more detail that how to create a RecyclerView AdapterClass you can see this or this有关如何创建 RecyclerView AdapterClass 的更多详细信息,您可以查看

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM