[英]NullPointerException when setting adapter
I'm trying to get the filenames in a folder inside a listview(that listview is inside a layout of a ViewPager) but i'm getting a NullPointerException and i can't figure what's wrong. 我正在尝试获取列表视图(该列表视图位于ViewPager的布局内)内的文件夹中的文件名,但我遇到了NullPointerException,我不知道出了什么问题。
public void citire() {
ListView lv1 = (ListView) findViewById(R.id.lv1);
myList = new ArrayList<String>();
File directory = Environment.getExternalStorageDirectory();
file = new File(directory + "/InterSRL");
File list[] = file.listFiles();
for (int i = 0; i < list.length; i++) {
myList.add(list[i].getName());
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, android.R.id.text1, myList);
lv1.setAdapter(adapter);
}
I'm getting the error at lv1.setAdapter(adapter);
我在
lv1.setAdapter(adapter);
遇到错误lv1.setAdapter(adapter);
( Line 169) (第169行)
06-28 13:10:57.987: E/AndroidRuntime(30450): Caused by: java.lang.NullPointerException
06-28 13:10:57.987: E/AndroidRuntime(30450): at com.example.testlayout.Gestionare.citire(Gestionare.java:169)
06-28 13:10:57.987: E/AndroidRuntime(30450): at com.example.testlayout.Gestionare.onCreate(Gestionare.java:33)
06-28 13:10:57.987: E/AndroidRuntime(30450): at android.app.Activity.performCreate(Activity.java:5104)
06-28 13:10:57.987: E/AndroidRuntime(30450): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
06-28 13:10:57.987: E/AndroidRuntime(30450): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
EDIT : Here is my whole Activity for the viewPager : 编辑:这是我对viewPager的全部活动:
public class Gestionare extends Activity {
public List<String> myList;
public File file;
ViewPager vp;
LinearLayout gestionare1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gestionare);
citire();
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
MyPagerAdapter adap = new MyPagerAdapter(this);
vp.setAdapter(adap);
vp.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageSelected(int arg0) {
// TODO Auto-generated method stub
}
});
}
private class MyPagerAdapter extends PagerAdapter {
private ArrayList<LinearLayout> arry;
public MyPagerAdapter(Context context) {
arry = new ArrayList<LinearLayout>();
// arry.add(new ListView1Page(context));
arry.add(new LinearLayout(context));
// views.add(new ListView2Page(context));
arry.add(new LinearLayout(context));
// use this when design done graphically
}
@Override
public void destroyItem(View view, int arg1, Object object) {
((ViewPager) view).removeView((LinearLayout) object);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return arry.size();
}
@Override
public Object instantiateItem(View view, int position) {
// View myView = views.get(position);
// ((ViewPager) view).addView(myView);
// return myView;
//
View v = new View(Gestionare.this.getApplicationContext());
final LayoutInflater inflater = (LayoutInflater) Gestionare.this
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
switch (position) {
case 0:
v = inflater
.inflate(R.layout.activity_gestionare2, null, false);
break;
case 1:
v = inflater
.inflate(R.layout.activity_gestionare1, null, false);
break;
default:
break;
}
((ViewPager) view).addView(v, 0);
return v;
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
public Parcelable saveState() {
return null;
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public void citire() {
myList = new ArrayList<String>();
vp = (ViewPager) findViewById(R.id.pager);
gestionare1 = (LinearLayout) findViewById(R.id.gestionare1);
ListView lv1 = (ListView) gestionare1.findViewById(R.id.lv1);
File directory = android.os.Environment.getExternalStorageDirectory();
file = new File(directory.getAbsolutePath() + "/InterSRL");
File list[] = file.listFiles();
for (int i = 0; i < list.length; i++) {
myList.add(list[i].getName());
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, android.R.id.text1, myList);
lv1.setAdapter(adapter);
}
} }
If the crash line is 如果崩溃线是
lv1.setAdapter(adapter);
this mean that lv1
is null and this mean that findViewById
didn't find in the specified layout a ListView
with id R.id.lv1
这意味着
lv1
为null,这意味着findViewById
在指定的布局中找不到ID为R.id.lv1
的ListView
For example, if you are using FragmentStatePagerAdapter in your ViewPager to init list you need to do something like this : 例如,如果您在ViewPager中使用FragmentStatePagerAdapter来初始化列表,则需要执行以下操作:
@Override
public Fragment getItem(int thePosition)
{
return fragments.get(thePosition);
}
And then in your Fragment : 然后在您的片段中:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View layout = inflater.inflate(R.layout.your_layout_with_list, null);
ListView lv1 = (ListView) layout .findViewById(R.id.lv1);
myList = new ArrayList<String>();
File directory = Environment.getExternalStorageDirectory();
file = new File(directory + "/InterSRL");
File list[] = file.listFiles();
for (int i = 0; i < list.length; i++) {
myList.add(list[i].getName());
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, android.R.id.text1, myList);
lv1.setAdapter(adapter);
return layout;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.