使用Cursor Loader在ListView中选择第一项

Ada*_*331 10 android listview fragment

我有一个Android应用程序(在平板电脑上)使用主 - 详细信息流来显示左侧的预测列表和右侧的详细信息.我希望能够在应用程序加载时选择第一个项目.

我在onLoadFinished设置所选索引的方法中有代码.我实现了这个,因为有时候用户会选择一个项目,如果他们改变了方向,它就会离开屏幕.我使用以下方法确保一旦加载,再次选择正确的项目:

@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
    mForecastAdapter.swapCursor(data);

    // If we have a selected index - select it.
    if(mSelectedIndex != ListView.INVALID_POSITION) {
        mForecastListView.setSelection(mSelectedIndex);
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试添加一个else语句来检查是否正在使用平板电脑,以选择第一个项目.代码已执行,但它似乎发生在listview实际加载并且未选择该项目之前.应用程序打开后,我应该在哪里放置代码来选择第一项?

编辑 这是我尝试过的方法,没有运气:

@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
    mForecastAdapter.swapCursor(data);

    // If we have a selected index - select it.
    if(mSelectedIndex != ListView.INVALID_POSITION) {
        mForecastListView.setSelection(mSelectedIndex);
    } else if(mForecastAdapter.IsTwoPane()){
        mForecastListView.setSelection(0);
    }
}
Run Code Online (Sandbox Code Playgroud)

Hah*_*ahn 1

我会执行以下操作,我通常对列表视图执行此操作,也应该与游标一起使用。

在您的适配器中,为所选位置创建一个字段

public int selectedPos = 0;//use setter/getter eventually
Run Code Online (Sandbox Code Playgroud)

现在确保 listView 的 OnItemClickListener/OnItemSelectedListener 执行以下操作:

<YOUR_ADAPTER_INSTANCE>.selectedPos = positionSelected;
Run Code Online (Sandbox Code Playgroud)

最后,getView()对于您的适配器,执行以下操作:

if(position == selectedPos) {
   //do what you want to show selection
} else {
   //do what you want for default state of the list items
}
Run Code Online (Sandbox Code Playgroud)

这将确保当第一次显示列表时,selectedPos将为0,因此将根据上面选择第一个位置。

如果您想通过orientationChange 等保留用户的选择,您只需确保“恢复”后将信息传递给适配器即可。