在ViewPager中初始化ListView的位置

时间:2013-06-28 12:25:08

标签: android

我试图在viewPager中创建一个listview(从文件夹中获取一些文件名),但是我在初始化ListView时遇到了问题。 在为ListView设置适配器时,我得到NullPointerException。 从我读过的内容来看,我需要在viewPager中初始化ListView,但我已经尝试了很多东西,我仍然可以获得NPE。 我在哪里初始化它以停止获得NPE?

所以,我在lv1.setAdapter(adapter);

得到NullPointException
public void citire() {

    myList = new ArrayList<String>();
    vp = (ViewPager) findViewById(R.id.pager);
    lv1=(ListView)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);
}

这是InstatiateItem部分:

@Override
    public Object instantiateItem(View collection, int position) {


          LayoutInflater inflater = (LayoutInflater) collection.getContext()
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            int resId = 0;
            switch (position) {
            case 0:
                resId = R.layout.activity_gestionare1;
                View view = inflater.inflate(resId, null);

                gestionare1 = (LinearLayout) view.findViewById(R.id.gestionare1);
                lv1=(ListView)view.findViewById(R.id.lv1);
                ((ViewPager) collection).addView(view, 0);
                citire();
                return view;
            case 1:
                resId = R.layout.activity_gestionare2;
                View view2 = inflater.inflate(resId, null);
                ((ViewPager) collection).addView(view2, 0);
                return view2;
            }
            return resId;}

这是整个活动,如果你们需要它来解决我的问题..

public class Gestionare extends Activity {

public List<String> myList;
public File file;
ViewPager vp;
LinearLayout gestionare1;
ListView lv1;


@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 collection, int position) {


          LayoutInflater inflater = (LayoutInflater) collection.getContext()
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            int resId = 0;
            switch (position) {
            case 0:
                resId = R.layout.activity_gestionare1;
                View view = inflater.inflate(resId, null);

                gestionare1 = (LinearLayout) view.findViewById(R.id.gestionare1);
                lv1=(ListView)view.findViewById(R.id.lv1);
                ((ViewPager) collection).addView(view, 0);
                citire();
                return view;
            case 1:
                resId = R.layout.activity_gestionare2;
                View view2 = inflater.inflate(resId, null);
                ((ViewPager) collection).addView(view2, 0);
                return view2;
            }
            return resId;}
    @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);
    lv1=(ListView)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);
}

}

1 个答案:

答案 0 :(得分:0)

当您尝试运行lv1时,

citire()为空:

setContentView(R.layout.activity_gestionare);
citire();

您是否尝试将citire()中的代码移至instantiateItem方法?如果将代码移到那里,您可能不需要重新初始化lv1。

另外,作为一般提示,尝试尽可能多地使用局部变量,这将有助于解决大量的范围问题。