1

viewPager 内に listview (フォルダーからいくつかのファイル名を取得する) を作成しようとしていますが、ListView の初期化に問題があります。ListView のアダプターを設定すると、NullPointerException が発生します。私が読んだことから、viewPager内のListViewを初期化する必要がありますが、多くのことを試しましたが、まだNPEを取得しています。NPE の取得を停止するには、どこで初期化する必要がありますか?

だから、私はNullPointExceptionを取得しますlv1.setAdapter(adapter);

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);
}

}

4

1 に答える 1

0

lv1実行しようとするとnullですcitire()

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

citire()コードをメソッドに移動しようとしましたinstantiateItemか? コードをそこに移動する場合、おそらく lv1 を再初期化する必要はありません。

また、一般的なヒントとして、可能な限りローカル変数を使用するようにしてください。これにより、多くのスコープの混乱が解消されます。

于 2013-06-28T12:34:39.417 に答える