【发布时间】: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