Android片段和适配器
我有下面的代码,这是一个具有回收器视图的片段,我有一个适配器,调试我的代码表明,在片段返回结果后,适配器被调用,尽管我正在创建适配器的实例,并将其设置为回收器视图,并在返回片段之前设置所需的结果。有人能帮我解释一下发生了什么吗我对Android还不熟悉,有点java经验 这是我的片段类:Android片段和适配器,android,android-fragments,android-recyclerview,android-adapter,Android,Android Fragments,Android Recyclerview,Android Adapter,我有下面的代码,这是一个具有回收器视图的片段,我有一个适配器,调试我的代码表明,在片段返回结果后,适配器被调用,尽管我正在创建适配器的实例,并将其设置为回收器视图,并在返回片段之前设置所需的结果。有人能帮我解释一下发生了什么吗我对Android还不熟悉,有点java经验 这是我的片段类: package com.clowiz.ui.gallery; import android.content.Intent; import android.os.Bundle; import android.u
package com.clowiz.ui.gallery;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.annotation.NonNull;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.clowiz.MainActivity;
import com.clowiz.R;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import java.util.List;
import static android.app.Activity.RESULT_OK;
public class GalleryFragment extends Fragment {
public static final int ADD_UNIVERSITY_CODE = 1;
private GalleryViewModel galleryViewModel;
private UniversityViewModel universityViewModel;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_gallery, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
FloatingActionButton buttonAddUniversity = view.findViewById(R.id.button_add_university);
buttonAddUniversity.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getActivity(), AddUniversityActivity.class);
startActivityForResult(intent, ADD_UNIVERSITY_CODE);
}
});
RecyclerView recyclerView = view.findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(view.getContext()));
final UniversityAdapter adapter = new UniversityAdapter();
recyclerView.setAdapter(adapter);
universityViewModel = ViewModelProviders.of(this).get(UniversityViewModel.class);
universityViewModel.getAllUniversities().observe(this, new Observer<List<University>>() {
@Override
public void onChanged(@Nullable List<University> unis) {
adapter.setUniversities(unis);
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == ADD_UNIVERSITY_CODE && resultCode == RESULT_OK) {
String name = data.getStringExtra(AddUniversityActivity.EXTRA_NAME);
University uni = new University(name);
universityViewModel.insert(uni);
Toast.makeText(getContext(), "uni added successfully", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getContext(), "uni not saved", Toast.LENGTH_SHORT).show();
}
}
}
package com.clowiz.ui.gallery;
导入android.content.Intent;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.TextView;
导入android.widget.Toast;
导入androidx.annotation.Nullable;
导入androidx.annotation.NonNull;
导入androidx.constraintlayout.widget.constraintlayout;
导入androidx.fragment.app.fragment;
导入androidx.lifecycle.Observer;
导入androidx.lifecycle.ViewModelProviders;
导入androidx.recyclerview.widget.LinearLayoutManager;
导入androidx.recyclerview.widget.recyclerview;
导入com.clowiz.main活动;
导入com.clowiz.R;
导入com.google.android.material.floatingactionbutton.floatingactionbutton;
导入java.util.List;
导入静态android.app.Activity.RESULT\u确定;
公共类GalleryFragment扩展了片段{
公共静态最终int ADD_UNIVERSITY_CODE=1;
专用GalleryViewModel GalleryViewModel;
私立大学VIEWMODEL大学VIEWMODEL;
@可空
@凌驾
创建视图时的公共视图(@NonNull LayoutInflater inflater、@Nullable ViewGroup container、@Nullable Bundle savedInstanceState){
返回充气机。充气(R.layout.fragment_gallery,container,false);
}
@凌驾
已创建公用void onview(@NonNull视图,@Nullable Bundle savedInstanceState){
FloatingActionButton buttonAddUniversity=view.findViewById(R.id.button\u add\u university);
buttonAddUniversity.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Intent Intent=新的Intent(getActivity(),AddUniversityActivity.class);
startActivityForResult(意图,添加大学代码);
}
});
RecyclerView RecyclerView=view.findViewById(R.id.recycler\u视图);
recyclerView.setHasFixedSize(true);
setLayoutManager(新的LinearLayoutManager(view.getContext());
最终UniversityAdapter适配器=新UniversityAdapter();
recyclerView.setAdapter(适配器);
universityViewModel=ViewModelProviders.of(this.get)(universityViewModel.class);
universityViewModel.getAllUniversities().observe(这个,新的观察者(){
@凌驾
更改后的公共void(@Nullable List unis){
大学(unis);
}
});
}
@凌驾
activityresult上的公共void(int-requestCode、int-resultCode、@Nullable-Intent-data){
super.onActivityResult(请求代码、结果代码、数据);
如果(请求代码==添加大学代码和结果代码==结果\u确定){
字符串名称=data.getStringExtra(AddUniversityActivity.EXTRA\u名称);
大学uni=新大学(名称);
大学视图模型插入(uni);
Toast.makeText(getContext(),“uni添加成功”,Toast.LENGTH_SHORT.show();
}否则{
Toast.makeText(getContext(),“未保存uni”,Toast.LENGTH_SHORT.show();
}
}
}
这是我的适配器:
package com.clowiz.ui.gallery;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.clowiz.R;
import java.util.ArrayList;
import java.util.List;
public class UniversityAdapter extends RecyclerView.Adapter<UniversityAdapter.UniversityHolder> {
private List<University> universities = new ArrayList<>();
@NonNull
@Override
public UniversityHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.university_item, parent, false);
return new UniversityHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull UniversityHolder holder, int position) {
University university = universities.get(position);
holder.textViewId.setText(String.valueOf(university.getId()));
holder.textViewName.setText(university.getName());
}
@Override
public int getItemCount() {
return universities.size();
}
public void setUniversities(List<University> universities) {
this.universities = universities;
notifyDataSetChanged();
}
class UniversityHolder extends RecyclerView.ViewHolder {
private TextView textViewId;
private TextView textViewName;
public UniversityHolder(View itemView) {
super(itemView);
textViewId = itemView.findViewById(R.id.text_view_id);
textViewName = itemView.findViewById(R.id.text_view_name);
}
}
}
package com.clowiz.ui.gallery;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.TextView;
导入androidx.annotation.NonNull;
导入androidx.recyclerview.widget.recyclerview;
导入com.clowiz.R;
导入java.util.ArrayList;
导入java.util.List;
公共类UniversityAdapter扩展了RecyclerView.Adapter{
私立大学列表=新ArrayList();
@非空
@凌驾
公立大学Holder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
View itemView=LayoutInflater.from(parent.getContext())
.充气(R.layout.U项目,父项,假);
返回新大学文件夹(itemView);
}
@凌驾
BindViewHolder上的公共无效(@NonNull UniversityHolder,int位置){
大学=大学。获取(职位);
holder.textViewId.setText(String.valueOf(university.getId());
holder.textViewName.setText(university.getName());
}
@凌驾
public int getItemCount(){
返回大学。大小();
}
公立大学(列出大学){
这就是大学;
notifyDataSetChanged();
}
类UniversityHolder扩展了RecyclerView.ViewHolder{
私有文本视图文本视图ID;
私有文本视图文本视图名称;
公立大学文件夹(视图项视图){
超级(项目视图);
textViewId=itemView.findViewById(R.id.text\u view\u id);
textViewName=itemView.findViewById(R.id.text\u view\u name);
}
}
}
这是我的viewModel:
package com.clowiz.ui.gallery;
import android.app.Application;
import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData;
import java.util.List;
public class UniversityViewModel extends AndroidViewModel {
private UniversityRepository repository;
private LiveData<List<University>> allUniversities;
public UniversityViewModel(@NonNull Application application) {
super(application);
repository = new UniversityRepository(application);
allUniversities = repository.getAllUniversities();
}
public void insert(University university) {
repository.insert(university);
}
public void update(University university) {
repository.update(university);
}
public void delete(University university) {
repository.delete(university);
}
public LiveData<List<University>> getAllUniversities() {
return allUniversities;
}
}
package com.clowiz.ui.gallery;
导入android.app.Application;
导入androidx.annotation.NonNull;
导入androidx.lifecycle.AndroidViewModel;
导入androidx.lifecycle.LiveData;
导入java.util.List;
公共类大学视图模型扩展了AndroidViewModel{
私立大学存储库;
私立大学;
公立大学VIEWMODEL(@NonNull应用程序){
超级(应用);
存储库=新大学存储库(应用程序);
allUniversities=repository.getAllUniversities();
}
公共空间插入(大学){
插入(大学);
}
公共空间更新(联合国大学)
<?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"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:id="@+id/relativeLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.023">
<TextView
android:id="@+id/text_view_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:text="Id"
android:textAppearance="@style/TextAppearance.AppCompat.Large"></TextView>
<TextView
android:id="@+id/text_view_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_toStartOf="@id/text_view_id"
android:layout_toLeftOf="@id/text_view_id"
android:text="Name"
android:textAppearance="@style/TextAppearance.AppCompat.Large"></TextView>
</RelativeLayout>
</LinearLayout>
<?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">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:layout_editor_absoluteX="159dp"
tools:layout_editor_absoluteY="182dp"
tools:listitem="@layout/university_item">
</androidx.recyclerview.widget.RecyclerView>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/button_add_university"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:focusable="true"
android:src="@drawable/ic_add_black_24dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.21"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.916" />
</androidx.constraintlayout.widget.ConstraintLayout>
public class UniversityViewModel extends AndroidViewModel {
private UniversityRepository repository;
private LiveData<List<University>> allUniversities;
public UniversityViewModel(@NonNull Application application) {
super(application);
repository = new UniversityRepository(application);
allUniversities = repository.getAllUniversities();
}
public void insert(University university) {
repository.insert(university);
}
public void update(University university) {
repository.update(university);
}
public void delete(University university) {
repository.delete(university);
}
public LiveData<List<University>> getAllUniversities() {
return allUniversities;
}
}
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_gallery, container, false);
}