【发布时间】:2021-01-01 12:55:08
【问题描述】:
我在fragment 中实现了listview(详细说明如下),我不确定是否有更好的方法。任何人都可以看到我的方法并向我建议在没有代码混乱的情况下实现它的最佳方法。另外,附上所需结果的 gif 动画。
我想做什么,当用户点击详细搜索时,用户将看到一个类别列表,每个类别都有一个子类别,每个类别可以勾选多个项目。用户返回main fragment 后,他将选择的项目将在主fragment 中可用。然后根据用户选择的数据,我可以运行搜索查询。
想要的结果
过滤片段
public class FilterFragment extends Fragment {
private GalleryViewModel galleryViewModel;
private ListView lv;
private List<Cats> categoryList;
private String[]
groupArray = {"Category1", "Category2", "Category3"};
private String[][] childArray = {{"Test1", "Test2", "Test3"},
{"Video1", "Video2", "Video3"}, {"Audio1", "Audio2", "Audio3"}};
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_gallery, container, false);
lv = (ListView) root.findViewById(R.id.list_view);
List<Cats> categoryData = null;
if(getArguments()!=null){
// data = (String[]) getArguments().getSerializable("strArray");
categoryList = (List<Cats>) getArguments().getSerializable("CATEGORY_LIST");
}
AdapterView.OnItemClickListener clickListener = null;
// If no data received means this is the first activity
if (categoryData == null) {
categoryData = categoryList;
clickListener = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
FilterFragment newFragment = new FilterFragment();
Bundle bundle = new Bundle();
bundle.putSerializable("strArray", childArray[position]);
newFragment.setArguments(bundle);
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.nav_host_fragment, newFragment);
transaction.addToBackStack(null);
transaction.commit();
}
};
}
// get data from the table by the ListAdapter
ListAdapter customAdapter = new ListAdapter(getContext(), R.layout.fragment_filter_item_row, categoryData);
lv.setAdapter(customAdapter);
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(clickListener);
return root;
}
}
我将通过bundles收回选定的条目到main fragment。
【问题讨论】:
标签: android listview android-fragments filtering