Я очень новичок в Android Studio. Я сделал приложение с нижней навигацией, чтобы пользователи могли получать доступ к разным экранам (используя фрагменты). На одном экране я сделал фрагмент, который должен показывать пользователям их предстоящие задачи. Я также сделал действие, чтобы пользователи могли создавать новые задачи, и когда они были выполнены, они перенаправлялись обратно на экран задач. Я подключил свое приложение к базе данных Firebase, поэтому, когда пользователи вводят свои данные, они сохраняются в базе данных (ЭТО РАБОТАЕТ И ПОКАЗЫВАЕТ В БАЗЕ ДАННЫХ). Однако, когда пользователь сохраняет задачу и перенаправляется обратно на экран задач, их данные не отображаются, и я не уверен, почему они не отображаются.
Я пытался просмотреть множество видео, чтобы попробовать их решения, но у меня это не работает, и я действительно не уверен, как это сделать. Как сделать, чтобы данные отображались??
Я использую FIREBASE DATABASE для своей базы данных (не firestore).
[Извините, что показываю много кода заранее - я просто пытаюсь быть тщательным]
[ПРОВЕРЬТЕ ИЗОБРАЖЕНИЯ, СВЯЗАННЫЕ С ПРОБЛЕМОЙ]
https://i.stack.imgur.com/thNWo.png — экран задач и кнопка
https://i.stack.imgur.com/d1Xg9.png — Добавить задачи экран
https://i.stack.imgur.com/BgLcC.png — данные добавлено в базу после нажатия "сохранить задачу"
https://i.stack.imgur.com/gTNpb.png — нет данных отображается на экране задач ???
.Java
MainActivity.java:
public class MainActivity extends AppCompatActivity {
TextView title, description, date;
LinearLayoutManager linearLayoutManager;
FirebaseDatabase firebaseDatabase;
DatabaseReference reference;
FirebaseRecyclerOptions<TaskItem> options;
FirebaseRecyclerAdapter<TaskItem, MyViewHolder> adapter;
RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
HomeFragment fragment1 = new HomeFragment();
FragmentManager homemanager = getSupportFragmentManager();
homemanager.beginTransaction().add(R.id.fragment_container, fragment1).commit();
BottomNavigationView bottomNav = findViewById(R.id.bottom_navigation);
bottomNav.setOnNavigationItemSelectedListener(navListener);
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
new HomeFragment()).commit();
}
private BottomNavigationView.OnNavigationItemSelectedListener navListener =
new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Fragment selectedFragment = null;
switch (item.getItemId()) {
case R.id.nav_home:
selectedFragment = new HomeFragment();
break;
case R.id.nav_calendar:
selectedFragment = new CalendarFragment();
break;
case R.id.nav_school:
selectedFragment = new SchoolFragment();
break;
}
FragmentManager navmanager = getSupportFragmentManager();
navmanager.beginTransaction().replace(R.id.fragment_container,
selectedFragment).commit();
return true;
}
};
}
NewTaskHome.java [для добавления новых задач]
public class NewTaskHome extends AppCompatActivity {
TextView title;
EditText titleName;
TextView description;
EditText descName;
TextView date;
EditText dateName;
Button saveTask;
Button cancelTask;
DatabaseReference database;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_task);
database = FirebaseDatabase.getInstance().getReference().child("TASKS");
titleName = findViewById(R.id.addTitleName);
descName = findViewById(R.id.addDescName);
dateName = findViewById(R.id.addDateName);
saveTask = findViewById(R.id.btnSaveTask);
cancelTask = findViewById(R.id.btnCancel);
saveTask.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
submitTask();
}
});
cancelTask.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(NewTaskHome.this,MainActivity.class);
startActivity(i);
}
});
}
private void submitTask() {
String title_val = titleName.getText().toString().trim();
String desc_val = descName.getText().toString().trim();
String date_val = dateName.getText().toString().trim();
DatabaseReference newTask = database.push();
newTask.child("title").setValue(title_val);
newTask.child("description").setValue(desc_val);
newTask.child("date").setValue(date_val);
Intent i = new Intent(NewTaskHome.this,MainActivity.class);
startActivity(i);
}
}
HomeFragment.java [для экрана задач]:
public class HomeFragment extends Fragment {
Button addNewBtn;
public HomeFragment(){
//Required empty constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_home, container, false);
addNewBtn = v.findViewById(R.id.btnAddNew);
addNewBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(getActivity(),NewTaskHome.class));
}
});
return v;
}
}
Я также создал класс TaskItem с методами получения и установки, когда пробовал некоторые решения (которые я не мог заставить работать)?
public class TaskItem {
String title, description, date;
public TaskItem(){
}
public TaskItem(String title, String description, String date) {
this.title = title;
this.description = description;
this.date = date;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
XML:
Activity_main.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"
tools:context=".MainActivity"
android:background="@android:color/holo_blue_dark" >
<LinearLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="vertical"
app:layout_constraintBottom_toTopOf="@+id/bottom_navigation"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="?android:attr/windowBackground"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:menu="@menu/bottom_navigation" />
</androidx.constraintlayout.widget.ConstraintLayout>
фрагмент_дом.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"
tools:context=".MainActivity"
android:background="#F4F4F4"
android:orientation="vertical">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="100dp"
android:background="@color/colorPrimaryDark">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="16dp">
<TextView
android:id="@+id/heading"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="TASKS"
android:textColor="#FFF"
android:textSize="32sp" />
<!-- android:fontFamily="@font/montserrat2" -->
<TextView
android:id="@+id/subheading"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="To-do list:"
android:textSize="18sp"
android:textColor="#4A4E6A"/>
</LinearLayout>
<Button
android:id="@+id/btnAddNew"
android:layout_width="55dp"
android:layout_height="55dp"
android:layout_marginTop="20dp"
android:layout_marginLeft="230dp"
android:background="@drawable/bg_btn_new"
android:text="+"
android:textSize="38sp"
android:textColor="#fff"
android:textAlignment="center"/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="1dp"
android:background="#131E69"/>
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/taskList"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginRight="16dp"
android:layout_marginLeft="16dp">
</androidx.recyclerview.widget.RecyclerView>
<TextView
android:id="@+id/footer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="No More To Do"
android:textAlignment="center"
android:textColor="#9A9A9A"
android:textSize="16dp">
</TextView>
</LinearLayout>
task_item.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"
android:layout_height="wrap_content"
android:layout_margin="10dp">
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="100dp"
android:background="@drawable/bg_do_item"
android:layout_marginBottom="20dp">
<LinearLayout
android:orientation="vertical"
android:layout_width="220dp"
android:layout_height="match_parent"
android:layout_marginLeft="16dp">
<TextView
android:id="@+id/taskTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="19dp"
android:text="Title name"
android:textSize="22sp"
android:textColor="#000C5D"
android:textStyle="bold"/>
<TextView
android:id="@+id/taskDesc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="Description"
android:textSize="18sp"
android:textColor="#ADADAD"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="45dp"
android:layout_marginTop="30dp">
<TextView
android:id="@+id/taskDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="Date"
android:textSize="18sp"
android:textColor="#F63EA5"/>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
Еще раз извините за объем кода и за то, что он не очень хорошо организован ... я изо всех сил пытался поместить свой код в вопрос.
Пожалуйста, помогите мне. Если вам нужно больше кода для объяснения, я буду рад показать его.