【问题标题】:How to use a value inside a RecyclerView's TextView to set new value to the TextView from a Room Database如何使用 RecyclerView 的 TextView 中的值从房间数据库中为 TextView 设置新值
【发布时间】:2021-06-24 21:48:08
【问题描述】:

我不确定标题有多清晰,但基本上应用程序有一个 RecyclerView,它是从房间数据库中填充的。我有两个房间数据库,一个用于保存标记信息,一个用于保存另一个数据库的标记 ID 的参考编号和其他一些信息。

现在 RecyclerView 填充了来自数据库的信息,该数据库包含对标记 ID 的引用。我想从 TextView 中获取引用的 ID,并将 Text 设置为包含 Markers 的数据库中的相应 Marker 信息。

首先是适配器,我在其中绑定了视图并为每个视图设置了值。使用 setJourneyObjectList() 方法将信息从持有 RecyclerView 的 Fragment 传递给 RecyclerView。

public class JourneyAdapter extends RecyclerView.Adapter<JourneyAdapter.JourneyViewHolder> {
    private List<JourneyObject> journeyObjectList = new ArrayList<>();
...

  @Override
    public void onBindViewHolder(@NonNull JourneyAdapter.JourneyViewHolder holder, int position) {
        JourneyObject journeyObject = journeyObjectList.get(position);
        holder.titleTextView.setText(journeyObject.getTitle());
        holder.descriptionTextView.setText(journeyObject.getDescription());
        holder.countyTextView.setText(journeyObject.getCounty());
        holder.location1.setText(Integer.toString(journeyObject.getLocation1()));
        holder.location2.setText(Integer.toString(journeyObject.getLocation2()));
    
   public void setJourneyObjectList(List<JourneyObject> journeyObjectList){
        this.journeyObjectList = journeyObjectList;
        notifyDataSetChanged()

 class JourneyViewHolder extends RecyclerView.ViewHolder{
     
        TextView location1, location2, location3, location4, location5;
        public JourneyViewHolder(final View itemView){
            super(itemView);
            titleTextView = itemView.findViewById(R.id.journeyTitleText);
            countyTextView = itemView.findViewById(R.id.journeyCountyText);
            descriptionTextView = itemView.findViewById(R.id.journeyDescriptionText);
            location1 = itemView.findViewById(R.id.journeyloc1);
            location2 = itemView.findViewById(R.id.journeyloc2);
            });
        }
    }

这是带有 RecyclerView 的 Fragment,我从中设置了 RecyclerView 适配器并设置了要从中填充 RecyclerView 的列表。

现在,在这个 Fragment 的末尾,我找到了 RecyclerView 项内的视图,并尝试将 Text 设置为具有收到 ID 的标记的标题。我知道它不会像这样工作,但这只是为了清楚我正在尝试做的事情。

public class TabJourneyFragment extends Fragment {

    private MarkerViewModel markerViewModel;
    private JourneyViewModel journeyViewModel;

    public TabJourneyFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_tab_journey, container, false);

        RecyclerView recyclerView = rootView.findViewById(R.id.journeyRecyclerView);
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        JourneyAdapter journeyAdapter = new JourneyAdapter(requireActivity());
        recyclerView.setAdapter(journeyAdapter);

        markerViewModel = new ViewModelProvider(this).get(MarkerViewModel.class);
        journeyViewModel = new ViewModelProvider(this).get(JourneyViewModel.class);

        journeyViewModel.getAllJourneyInfo().observe(getActivity(), new Observer<List<JourneyObject>>() {
            @Override
            public void onChanged(List<JourneyObject> journeyObjects) {
                journeyAdapter.setJourneyObjectList(journeyObjects);
            }
        });
        TextView location1 = rootView.findViewById(R.id.journeyloc1);

        markerViewModel.getAllMarkers().observe(getActivity(), new Observer<List<MarkerObject>>() {
            @Override
            public void onChanged(List<MarkerObject> markerObjects) {
                for (MarkerObject markerObject : markerObjects){
                    if (location1 != null){
                        if (location1.getText().equals(Integer.toString(markerObject.getId()))){
                            location1.setText(markerObject.getTitle());
                        }
                    }else {
                        Toast.makeText(getActivity(), "This is empty", Toast.LENGTH_SHORT).show();
                    }
                }
            }
        });
        return rootView;
    }
}

我希望有人可以提供帮助,并且我已经足够清楚以至于可以理解。 提前致谢!

【问题讨论】:

    标签: java android android-fragments android-recyclerview android-room


    【解决方案1】:

    要根据标记 id 更改标题,请将 markerObject,journeyObjects 发送到您的适配器。

     journeyViewModel.getAllJourneyInfo().observe(getActivity(), new Observer<List<JourneyObject>>() {
            @Override
            public void onChanged(List<JourneyObject> journeyObjects) {
                //add this journyObjects in List
              journeyObjectsList.addAll(journeyObjects);
            }
        });
       
    
        markerViewModel.getAllMarkers().observe(getActivity(), new Observer<List<MarkerObject>>() {
            @Override
            public void onChanged(List<MarkerObject> markerObjects) {
               //set adapter here for recyclerView
    
                markerObjectsList.addAll(markerObjects);
    
                //change adapter constructor based on this argument
               journeyAdapter.setJourneyObjectList(journeyObjectsList,markerObjectList);
            }
        });
    

    //然后在onBindViewHolder()中为每个文本视图设置Title

     @Override
    public void onBindViewHolder(@NonNull JourneyAdapter.JourneyViewHolder holder, int position) {
        JourneyObject journeyObject = journeyObjectList.get(position);
        
        holder.location1.setText(Integer.toString(journeyObject.getLocation1()));
        
         
         for (int i=0;i<markerObjectList.size();i++){
                    
                        if (location1 != null && location1.getText().equals(Integer.toString(markerObjectList.get(i).getId()))){
                            location1.setText(markerObjectList.get(i).getTitle());
                        }
                    }else {
                        Toast.makeText(getActivity(), "This is empty", Toast.LENGTH_SHORT).show();
                    }
                }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-05
      • 2021-02-06
      • 2016-12-11
      • 2022-01-18
      • 1970-01-01
      相关资源
      最近更新 更多