gpt4 book ai didi

android - 使用自定义适配器的 fragment 中的 OnItemSelectedListener

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:58:04 24 4
gpt4 key购买 nike

所以我已经用这个玩了几天,但似乎无法让它工作。我有一个显示 fragment 的 Activity ,该 fragment 是我使用 ViewPager 分页的 fragment 列表的成员。 Fragment 本身由一个 TextView 和一个 ListView 组成。 ListView 从自定义适配器填充自身。

我要做的是将 OnItemSelected 事件传递回处理它的 Fragment。我最好直接在此处显示代码。

这是 Activity

public class DialogInventory extends FragmentActivity implements OnItemSelectedListener {

ViewPager viewPager;
Pager pager;

@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.dialog_inventory);

List<Fragment> fragList = new Vector<Fragment>();
fragList.add(Fragment.instantiate(this, FragmentOne.class.getName()));
fragList.add(Fragment.instantiate(this, FragmentTwo.class.getName()));
pager = new Pager(getSupportFragmentManager(), fragList);

viewPager = (ViewPager) findViewById(R.id.pagerMain);
viewPager.setAdapter(pager);

listMain = (ListView) findViewById(R.id.listMain);
listMain.setOnItemSelectedListener(this);
}

public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
switch (viewPager.getCurrentItem()) {
case 0:
FragmentOne fragOne = new FragmentOne();
fragOne.onItemSelected(parent, view, pos, id);
break;
case 1:
FragmentTwo fragTwo = new FragmentTwo();
fragTwo.onItemSelected(parent, view, pos, id);
break;
}
}
public void onNothingSelected(AdapterView<?> arg0) {
}

这是 fragment :

public class FragmentOne extends Fragment implements OnItemSelectedListener {

View view;
ListView listMain;
ArrayList<String> invItems = new ArrayList<String>();

public FragmentOne() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup viewGroup, Bundle bundle) {
view = inflater.inflate(R.layout.fragment_one, viewGroup, false);

listMain = (ListView) v.findViewById(R.id.listMain);
listMain.setAdapter(new AdapterItem(getActivity().getApplicationContext(),
R.layout.tile_item, invItems));
listMain.setOnItemSelectedListener(this);
return view;
}
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
Log.i("Test", "hit");
}

为简洁起见,省略了一些行。让我们继续假设 Fragments 正确显示并且一切正常。唯一不能正常工作的是 Activity 中的 OnItemSelected 事件根本没有触发......更不用说 fragment 中的 OnItemSelected 事件了。我在这里做错了什么?

编辑:ListView 必须位于各自的 fragment 中(因为它们将单独显示在不同的 Activity 以及上面列出的 Activity 中)。这里最大的问题是我无法在我的 Activity 中设置 OnItemSelectedListener,因此该事件永远不会被触发。我已经制定并运行了导致该点的所有代码,只是 OnItemSelectedListener 不起作用。

Edit2:我明天会为这个问题增加赏金。鉴于此,我认为我会更加隐含正确答案的范围。正确的答案不会建议对 UI 布局或演示进行任何重大更改。正确答案会将 OnItemSelected 事件传递给 Fragment 并在那里进行处理。答案不会让我用一行又一行的代码加载我的 Activity 来实现我认为只需要几行就可以做到的事情。更优雅的答案显然更吸引人。感谢任何看过这篇文章的人。

这里的问题是我在 Activity 中遇到了 NPE。我如何将它指向存在于与其所在类的布局不同的布局中的 ListView。

最佳答案

你在哪里使用listView.setOnItemSelectedListener(this)?您需要明确通知 ListView 您的 Activity 应该控制 UI 行为...

然后在您的 fragment 中添加:

listMain.setOnItemSelectedListener(this);

关于android - 使用自定义适配器的 fragment 中的 OnItemSelectedListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11527532/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com