Android片段和适配器

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

我有下面的代码,这是一个具有回收器视图的片段,我有一个适配器,调试我的代码表明,在片段返回结果后,适配器被调用,尽管我正在创建适配器的实例,并将其设置为回收器视图,并在返回片段之前设置所需的结果。有人能帮我解释一下发生了什么吗我对Android还不熟悉,有点java经验

这是我的片段类:

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);
}