【发布时间】:2013-01-26 01:03:06
【问题描述】:
所以我在 ViewPager 中有一个 ListView。
我在一个布局 (add_site.xml) 中有 ListView 和一个 EditText 字段,该字段将填充另一个布局 (main.xml) 上的 ListView onClick
我收到一个 NPE 错误,因为我试图将 ArrayAdapter 全局化,认为这是能够在 ViewPager 中与这两种布局对话的正确方法。
很明显,我的 android 开发技能不是那么好。我对此很陌生。
因此,感谢您的帮助!
这是我的代码。
这是 PagerAdapter 开始的地方
private class MyPagerAdapter extends PagerAdapter {
final ViewPager mPager = (ViewPager) findViewById(R.id.fieldspager);
public int getCount() {
return 3;
}
public Object instantiateItem(View collection, int position) {
LayoutInflater inflater = (LayoutInflater) collection.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ListView lv = (ListView)findViewById(android.R.id.list);
final ArrayList<String> siteList = new ArrayList<String>();
final ArrayAdapter<String> aa;
aa = new ArrayAdapter<String>(getBaseContext(), R.layout.list_row, siteList);
lv.setAdapter(aa);
int resId = 0;
View view = null;
switch (position) {
case 0:
resId = R.layout.field01;
view = inflater.inflate(resId, null);
((ViewPager) collection).addView(view, 0);
return view;
case 1: //ListView lives in here.
resId = R.layout.add_site;
view = inflater.inflate(resId, null);
Button addSiteButton = (Button)view.findViewById(R.id.addSiteButton);
((ViewPager) collection).addView(view, 0);
addSiteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mPager.setCurrentItem(2, true);
}
});
//I originally had the ArrayAdapter code here, but thought it needed to be global so I moved it up.
return view;
case 2:
resId = R.layout.main;
view = inflater.inflate(resId, null);
Button signInButton = (Button)view.findViewById(R.id.sign_in_button);
//This is where the EditText lives
final EditText editText = (EditText)view.findViewById(R.id.textViewId);
((ViewPager) collection).addView(view, 0);
signInButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//This is where the button click happens
siteList.add(0, editText.getText().toString());
aa.notifyDataSetChanged();
editText.setText("");
mPager.setCurrentItem(1, true);
}
});
return view;
}
return view;
}
提前致谢!
【问题讨论】:
-
我不是 100% 确定您希望您的 arrayadapter 做什么,但通常建议的片段间通信模式是在 Activity 和片段之间建立(一个)接口。该接口列出了您希望片段访问的活动中的方法。片段保存对活动转换的引用作为 onattach 方法中的接口。同时,如果您需要从活动中调用片段中的方法,您只需将它们定义为公共并调用它们。这种模式减少了耦合。如果你需要,我可以在几个小时内给出一个代码示例。
-
你从哪里得到 npe?
-
@fedepaol 我在
lv.setAdapter(aa);获得NPE -
@anthropomo 我的问题是基于缺乏知识。我可能有一些事情不正常,但只是不知道该顺序应该是什么。我想要它做的是在
main布局中的EditText中键入一些内容,然后在相邻布局add_site上填充ListView -
我之前的评论误读了您的意图。在您的 NPE 行之前添加一些日志记录,以便我们可以看到哪个对象为空。
if(lv == null) Log.v("lv", "null"); else Log.v("aa", "null")之类的,然后发布 logcat。
标签: android android-layout android-listview android-viewpager android-pageradapter