如何在 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() 和自定义列表布局

如何将 ListFragment 添加到布局中

如何更改 ListFragment 中某些行的颜色?

Android Studio 中的 ListFragment

长按 ListFragment

如何在 Oracle 中定义一个触发器 ON COMMIT?