我有一个包含项目类别的列表视图。当我在列表上按类别标题时,它将显示另一个包含所选类别内项目的列表视图。
我通过使用ListFragment来做到这一点。我是否必须启动一个新活动并按意图一起传递类别ID?
这是我ListFragment的类别:
ListFragment
public class CategoryFragment extends ListFragment implements OnItemClickListener { @Override public void onActivityCreated(Bundle savedInstanceState) { getListView().setOnItemClickListener(this); } @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { // what to do here } }
我要添加什么onItemClick以转到“项目列表”?我需要使用另一个ListFragment还是仅使用常规ListActivity?
onItemClick
如何从解析的JSON中检索类别ID并将其传递给列表项?
编辑:我使用Volley解析JSON。我正在考虑在类别ID的布局中创建一个不可见的TextView,以便可以从那里拉出它。那可能吗?
让您FragmentActivity实现具有categorySelected(int categoryId)方法的接口。
FragmentActivity
categorySelected(int categoryId)
在CategoryOverviewFragment内,当您选择一个类别时可以调用此方法:
@Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { ((CategorySelectedListener)getActivity()).categorySelected(i); }
然后,在活动中实施categorySelected并将总览片段替换为CategoryFragment。
categorySelected
CategoryFragment
创建时,CategoryFragment将类别ID设置为参数。最好将newInstance模式用于setArguments()。
setArguments()
要将类别概述列表片段替换为类别详细信息片段,请使用FragmentManagerto beginTransaction(),然后使用replace()。
FragmentManager
beginTransaction()
replace()
假设类别概述片段是动态添加的,而不是在XML中使用如下代码:
CategoryFragment newFragment = CategoryFragment.newInstance(categoryIdSelected); FragmentTransaction transaction = getFragmentManager().beginTransaction(); transaction.replace(R.id.fragment_container, newFragment); transaction.addToBackStack(null); transaction.commit();
如果类别列表片段是用XML添加的,则需要删除该类别并将其更改为,FrameLayout然后在代码中动态添加该片段。
FrameLayout