Создание списка задач с использованием Firebase, запутался, пытаясь понять логику - PullRequest
0 голосов
/ 11 апреля 2019

Создание списка задач с использованием firebase, запутанный, пытаясь понять логику, стоящую за ним, смотрите основную деятельность ниже. \ Создание списка задач с использованием firebase, запутанный, пытаясь понять логику, стоящую за ним, см. Основную деятельность ниже.список задач, использующий firebase, запутался, пытаясь понять логику, стоящую за ним, см. основные действия ниже

public class MainActivity extends AppCompatActivity {

    List<ToDo> toDoList = new ArrayList<>();
    FirebaseFirestore database;
//
    RecyclerView listItem;
    RecyclerView.LayoutManager layoutManager;

    FloatingActionButton fab;

    public MaterialEditText title,description;
    public boolean isUpdate = false;
    public String idUpdate = " ";

    ListItemAdapter adapter;
    SpotsDialog dialog;

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



        database = FirebaseFirestore.getInstance();

        //i think the issue is here
        listItem = (RecyclerView)findViewById(R.id.listTodo);
        listItem.setHasFixedSize(true);


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





            @Override
            public void onClick(View view) {
                if(!isUpdate){
                    setData(title.getText().toString(), description.getText().toString());
                }
                else{
                    updateData(title.getText().toString(),description.getText().toString());
                    isUpdate = !isUpdate; //this resets it
                }
            }
        });

    }
    @Override
    public boolean onContextItemSelected(MenuItem item) {
        if (item.getTitle().equals("DELETE"))
            deleteItem(item.getOrder());
        return super.onContextItemSelected(item);
    }





    private void loadData() {
        dialog.show();
        if (toDoList.size() > 0)
            toDoList.clear();
        database.collection("ToDoList")
                .get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {

                        //end of oncomplete section added
                        for (DocumentSnapshot doc:task.getResult())
                        {
                            ToDo todo = new ToDo(doc.getString("id"),

                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Toast.makeText(MainActivity.this, ""+e.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                });
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    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="@color/white"
    tools:context=".MainActivity">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/app_bar_layout"
        android:fitsSystemWindows="true"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <LinearLayout
            android:id="@+id/layout_info"
            android:orientation="vertical"
            android:padding="16dp"
            android:background="#1190CB"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">


            <com.rengwuxian.materialedittext.MaterialEditText
                android:id="@+id/title"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="text"
                android:text="Title"
                android:textColorHint="@android:color/white"
                android:textSize="30sp"
                app:met_baseColor="@android:color/white"
                app:met_floatingLabel="highlight"
                app:met_primaryColor="@android:color/white"
                app:met_singleLineEllipsis="true" />
            <!--add more for card items -->
            <com.rengwuxian.materialedittext.MaterialEditText
                android:id="@+id/description"
                android:text="Description"
                android:textSize="20sp"
                android:inputType="textMultiLine"
                android:textColorHint="@android:color/white"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:met_baseColor="@android:color/white"
                app:met_floatingLabel="highlight"
                app:met_primaryColor="@android:color/white"
                app:met_singleLineEllipsis="true"/>

        </LinearLayout>


    </android.support.design.widget.AppBarLayout>

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:src="@drawable/ic_add_black_24dp"
        android:layout_marginRight="10dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:elevation="6dp"
        app:pressedTranslationZ="12dp"
        app:layout_anchor="@id/app_bar_layout"
        app:layout_anchorGravity="bottom|right"
        app:fabSize="normal"/>


</android.support.design.widget.CoordinatorLayout>

Ответы [ 4 ]

1 голос
/ 11 апреля 2019

В onCreate вашей активности попробуйте сначала запустить layoutManager и только затем связать его с recyclerView:

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

Другой вариант - объявить его в файле xml:

   xmlns:app="http://schemas.android.com/apk/res-auto"

  <android.support.v7.widget.RecyclerView
    android:id="@+id/listTodo"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:layoutManager="android.support.v7.widget.LinearLayoutManager" />

, и тогда вам не придется ничего делать программно.

Обновление по комментарию:

Ваше приложение падает с NullPointerException, потому что вы неНе инициируйте todoList в конструкторе вашего адаптера, поэтому getItemCount() вызывается, когда ваш список равен нулю.

Добавьте проверку в этом методе в классе адаптера:

@Override
public int getItemCount() {
    if (todoList != null)
        return todoList.size();
    return 0;
}
0 голосов
/ 12 апреля 2019

Попробуйте установить менеджер раскладки таким образом.


        listItem = (RecyclerView)findViewById(R.id.listTodo);

        LinearLayoutManager layoutManager = new LinearLayoutManager(this, RecyclerView.VERTICAL, false);
        listItem.setLayoutManager(layoutManager);
        listItem.setHasFixedSize(true);

Попробуйте использовать вид утилизатора Firebase, он поможет вам управлять новыми элементами, обновлениями и т. Д.

https://github.com/firebase/FirebaseUI-Android

0 голосов
/ 11 апреля 2019

удалить loadData () внутри loadData ().

0 голосов
/ 11 апреля 2019

Вам не хватает настроек менеджера компоновки для вашего вида переработчика.Вы прокомментировали создание его

listItem.setLayoutManager(manager);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...