use*_*018 5 android android-listview android-fragments
所以我现在已经玩了好几天了,似乎无法让它发挥作用.我有一个显示片段的活动,而片段是我使用ViewPager翻阅的片段列表的成员.Fragment本身由TextView和ListView组成.ListView从自定义适配器填充自身.
我想要做的是将OnItemSelected事件传递回处理它的Fragment.我可能更好地继续在这里显示代码.
这是活动
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) {
}
Run Code Online (Sandbox Code Playgroud)
这是碎片:
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");
}
Run Code Online (Sandbox Code Playgroud)
为简洁起见,省略了一些行.让我们假设片段正确显示并且一切正常.唯一不能正常工作的是Activity中的OnItemSelected事件根本没有触发......更不用说片段中的OnItemSelected事件了.我在这做错了什么?
编辑:ListViews必须位于各自的片段中(因为它们将分别显示在不同的活动以及上面列出的活动中).这里最大的问题是我无法在Activity中设置OnItemSelectedListener,因此事件永远不会被触发.我已经完成并运行了所有代码,只是OnItemSelectedListener不起作用.
编辑2:明天我将为这个问题增加一笔赏金.鉴于此,我认为我会更加隐含正确答案的范围.正确的答案不会暗示UI布局或演示文稿的任何重大变化.正确的答案会将OnItemSelected事件传递给Fragment并在那里处理.答案不会让我用一行一行的代码加载我的Activity,以实现我认为只有几行可行的东西.更优雅的答案显然更具吸引力.感谢任何看过这个的人.
这里的问题是我的活动中有NPE.如何将其指向存在于与其所在类的布局不同的布局中的ListView.
你在哪里使用listView.setOnItemSelectedListener(this)?您需要明确通知 ListView 您的 Activity 应该控制 UI 行为...
并在您的片段中添加:
listMain.setOnItemSelectedListener(this);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8223 次 |
| 最近记录: |