0

我正在创建我的第一个 android 应用程序,其中我有一个包含 3 个不同列表的 ViewPager。因此,用户可以在 3 个列表之间滑动。列表本身是使用 arrayAdapter 填充的,目前我的数组是在 strings.xml 中定义的,如下所示:

<string-array name="first_array">
    <item>item1</item>
    <item>item2</item>
    <item>item3</item>
</string-array>
<string-array name="second_array">
...

我正在使用 FragmentStatePagerAdapter 生成不同的“页面”(每个页面都有一个唯一的列表),这是通过以下方式实现的:

@Override
public Fragment getItem(int i) {
  Fragment fragment = new MyListFragment();
  Bundle args = new Bundle();
  int argValue=0;
  switch(i) {
    case 0: argValue = R.array.first_array; break;
    case 1: argValue = R.array.second_array; break;
    case 2: argValue = R.array.third_array; break;
  }
  args.putInt(MyListFragment.ARG_KEY, argValue);
  fragment.setArguments(args);
  return fragment;
}

@Override
public int getCount() { return 3; }

但是,这并不好,因为如果我决定删除/添加/编辑列表的名称,我将不得不回到这里并在此处反映更改,从而引入强耦合。

所以我正在考虑创建一个保存数组而不是在 res/strings.xml 中的 java 类,在这种情况下,所有的耦合都会消失,但我不确定将资源放在 java 类中而不是在水库/。

4

1 回答 1

2

如果您在市场上寻求快速解决方案,为什么不将您的数组名称保存在另一个数组中,并在运行时查找它们呢?

<string-array name="array1">
    ...
</string-array>

<string-array name="array2>
    ...
</string-array>

<string-array name="arrays">
    <item>array1</item>
    <item>array2</item>
</string-array>

然后,您可以通过使用数组名称数组的长度来找出当前有多少个数组,并通过以下方式查找所需的数组资源 ID

getResources().getIdentifier()

不完全是一个干净的解决方案,但您只需要维护字符串资源。在添加/删除/重命名数组时避免更改代码,但如果您决定重命名命名数组,您仍然需要触摸它。

于 2013-09-12T21:31:56.583 回答