【问题标题】:Android Fragments default select first item in ListViewAndroid Fragments 默认选择 ListView 中的第一项
【发布时间】:2015-07-06 16:29:11
【问题描述】:

在 Android Studio 中,我选择了一个基于主/详细信息流的新项目。该项目按应有的方式工作。现在我想扩展它。到目前为止,仅当我单击列表中的某个项目时,才会显示详细信息片段中项目的内容。我希望在应用程序启动时自动选择最上面的项目。我以为我在 ItemListFragment 中只是一个方法调用

@Override
public void onStart()
{
    mCallbacks.onItemSelected(DummyContent.ITEMS.get(0).id);
}

在所有对象初始化后,在生命周期中模拟点击。那失败了。这样做的最佳方法是什么?

【问题讨论】:

    标签: android listview android-fragments


    【解决方案1】:

    可以通过以下代码选择第一个元素

    yourListView.setSelection(0);
    yourListView.getSelectedView().setSelected(true);
    

    希望这会有所帮助。队友的欢呼声! :)

    【讨论】:

    • 在 onStart getSelectedView 中为空。所以这不起作用。
    • listview 在什么生命周期方法中满了? onStart 在生命周期中已经很晚了。我什么时候给它打电话?
    • 你可以在设置适配器后立即执行此操作
    • 在 ItemListFragment 中,适配器在 onCreate 中设置。在那次调用之后,我尝试执行上面的代码。但这不起作用。
    【解决方案2】:

    您可以使用 SharedPreferences。您可以在创建列表视图时将列表视图的第一项保存为首选项,以便以后使用。

    【讨论】:

      【解决方案3】:

      你在 onResume() 中试过了吗?我总是把它放在 onResume()

      更新 #1

      您可以尝试我的方式来实现选择。通常我不使用列表视图的选择。

      1.在您的数据模型中,创建一个名为“选择”的布尔字段。

      2.当您将数据应用到适配器时,将第一个数据“选择”设置为 true。

      3.在您的适配器 getView 回调中,尝试处理您的数据“选择”,例如:

      if (!dummyData.selection){
          do something when not select....
      }else{
          do something when selected...
      }
      

      更新 #2 将此代码放在 ItemListFragment 中

      @Override
      public void onResume() {
          super.onResume();
          mCallbacks.onItemSelected(DummyContent.ITEMS.get(0).id);
      }
      

      【讨论】:

      • 你尝试过 onResume 中@Ibtehaz Shawon 的代码片段吗?如果我没猜错,您是在尝试手动调用列表视图的 onItemSelected 回调吗?
      • 我使用“官方”Android 示例代码,当您创建这个主/详细项目时。没有自定义适配器。
      • 等一下。让我检查一下
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多