如何在 ListFragment 中触发 onListItemClick
Posted
技术标签:
【中文标题】如何在 ListFragment 中触发 onListItemClick【英文标题】:How to trigger onListItemClick in a ListFragment 【发布时间】:2012-01-26 13:13:49 【问题描述】:在我的应用程序的平板电脑布局中,我有三个 ListFragment 和一个常规 Fragment,我们称它们为 Make、Model、Size 和 Details。最初填充 Make 列表,然后根据 Make 选择填充 Model 列表;选择模型时,会填充尺寸列表;选择大小时,会显示详细信息。这些事件中的每一个(列表项选择)都通过 onListItemClick 处理程序进行处理。
在启动时,我想填充 Make 列表,选择列表中的第一个 Make 并让它通过 onListItemClick 处理程序来填充模型列表(依此类推,以便填充所有列表并显示详细信息 -这也应该是在任何列表中进行任何选择时的行为 - 选择下一个列表中的第一项,直到我们显示详细信息)。请注意,我拥有数据库的控制权,并且对于每个 Make,总会有至少一个 Model,对于每个 Make/Model,至少有一个 Size,对于每个 Make/Model/Size,总是有一个 Detail。
所以,我想选择列表中的第一项并让它触发 onListItemClick 处理程序。我尝试了以下方法(通过适当的边界检查等),但它不起作用。
getListView().setItemChecked(0, true);
对“开箱即用”ListFragment 的唯一更改是设置 CacheColorHint
getListView().setCacheColorHint(R.color.GhostWhite);
其中 GhostWhite 在styles.xml 中设置为
<color name="GhostWhite">#88FFFFFF</color>
有什么想法吗?
提前致谢。
【问题讨论】:
【参考方案1】:要选择列表中的第一项,首先从触摸中获取焦点,然后选择第一项,然后触发 onclick 处理程序
int position = 0;
getListView().requestFocusFromTouch();
getListView().setSelection(position);
getListView().performItemClick(getListView().getAdapter().getView(position, null, null), position, position);
【讨论】:
唯一缺少的部分是该代码的放置位置。它在 onActivityCreated 中完美运行。一定要执行 super.onActivityCreated(savedInstanceState);或者没有快乐。我在 onViewCreated 中试了一下,没有得到列表,只是右侧视图。【参考方案2】:试试 setSelection(int position)
http://developer.android.com/reference/android/widget/ListView.html#setSelection(int)
【讨论】:
它确实看起来应该可以工作,但它不适合我。【参考方案3】:1.) 在列表片段的 OnActivityCreated 中创建一个类似这样的接口
public interface ListItemSelectedListener
public void onListItemSelected(int index);
2.) 在您的活动中实现接口
3.) 在您的列表片段中创建private ListItemSelectedListener selectedListener
4.) 在 OnActivityCreated 中设置selectedListener.onListItemSelected(0)
。
这就是我使用 Android 支持包的工作方式 - 在 HC 上应该类似
【讨论】:
【参考方案4】:尝试添加这个,它适用于我的项目:
@Override
public void onListItemClick(ListView l, View v, int position, long id)
// TODO Auto-generated method stub
super.onListItemClick(l, v, position, id);
Intent intent = new Intent();
intent.setClass(getActivity(), someActivity.class);
startActivity(intent);
【讨论】:
当我尝试在 ListView 上应用 clickListener 并尝试在滚动我的应用程序时滚动列表视图时,有人可以指点我吗?这是我在 SO 中提出的问题,但没有得到任何解决方案 @987654321 @【参考方案5】:在onActivityCreated(Bundle savedInstanceState)方法中的Fragment类中,可以添加如下内容:
@Override
public void onActivityCreated(Bundle savedInstanceState)
super.onActivityCreated(savedInstanceState);
//if the parent is in the landscape, make the first item selected
if (getActivity().getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)
try
if (mItems.size() > 0)
//notify the activity that an item is selected
mListener.onMasterItemSelected(mItems.get(0));
catch (Exception e)
Log.e("exception", e.toString());
【讨论】:
以上是关于如何在 ListFragment 中触发 onListItemClick的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ListFragment 中使用 setEmptyView() 和自定义列表布局