如何在ListFragment中触发onListItemClick事件

6
在我的应用程序平板布局中,有三个ListFragments和一个常规片段,我们称它们为Make、Model、Size和Details。最初,填充Make列表,然后根据Make的选择,填充Model列表;当选择模型时,填充尺寸列表;当选择尺寸时,显示详细信息。每个事件(列表项选择)都通过onListItemClick处理程序处理。
在启动时,我想填充制造商列表,选择列表中的第一个制造商,并通过onListItemClick处理程序填充Model列表(等等,直到所有列表都被填充并显示详细信息--这也应该是任何一个列表中进行任何选择时的行为--选择下一个列表中的第一项,直到我们显示详细信息)。请注意,我可以控制数据库,对于每个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>

有什么想法吗?

提前致谢。

5个回答

14

要选择列表中的第一个项目,首先从触摸获取焦点,然后选择第一个项目,最后触发onclick处理程序。

int position = 0;
getListView().requestFocusFromTouch();
getListView().setSelection(position);
getListView().performItemClick(getListView().getAdapter().getView(position, null, null), position, position);

这个问题的唯一遗漏是在哪里放置这段代码。它在onActivityCreated中运行得非常完美。一定要执行super.onActivityCreated(savedInstanceState);,否则就会出现问题。我尝试将其放在onViewCreated中,但只得到了右侧视图而没有列表。 - Software Prophets

1

它看起来肯定能工作,但对我来说却没有。 - Ed Sinek

1

尝试添加这个,它在我的项目中有效:

@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并尝试滚动ListView时,我的应用程序崩溃了。这是我在SO上提出的问题,但没有得到任何解决方案。http://stackoverflow.com/questions/21091429/failed-to-print-position-of-clickeditem-of-listview-in-android-using-java/21091513?noredirect=1#comment31725907_21091513 - Erum

1
在Fragment类中的onActivityCreated(Bundle savedInstanceState)方法中,您可以添加以下内容:
@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());
            }
        }
    }

1

1.) 在您的列表片段的OnActivityCreated方法中创建一个接口,如下所示

public interface ListItemSelectedListener {
        public void onListItemSelected(int index);
}

2.) 在你的activity中实现接口 3.) 在你的列表fragment中创建 private ListItemSelectedListener selectedListener 4.) 在OnActivityCreated中设置 selectedListener.onListItemSelected(0)

这是我在使用Android Support Package时的方法 - 在HC上应该类似。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接