2013-06-28 110 views
0

我想獲得列表視圖內的文件夾中的文件名(該列表視圖是在一個ViewPager的佈局內),但我得到一個NullPointerException,我不能找出什麼是錯的。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); 
} 

我得到的lv1.setAdapter(adapter);(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) 

編輯: 這裏是我的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); 
} 

}

+1

myList.add(list [i] .getName()); - 這是問題嗎? (Gestionare.java:169) – Analizer

+3

嘗試使用ListView lv1 =(ListView)yourViewPager.findViewById(R.id.lv1);代替。 –

+0

有問題的行是lv1.setAdapter(adapter); –

回答

0

如果碰撞線是

lv1.setAdapter(adapter); 

這意味着lv1爲空,這意味着findViewById沒有在指定的佈局找到ListView ID爲R.id.lv1

0

例如,如果你正在使用FragmentStatePagerAdapter在ViewPager到初始化列表中,您需要做這樣的事情:

@Override 
public Fragment getItem(int thePosition) 
{ 
    return fragments.get(thePosition); 
} 

然後在您的片段:

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; 
} 
+0

不,不使用.. ..已經嘗試了你們告訴我的,並沒有奏效。我爲ViewPager添加了整個活動,也許你們可以弄明白,因爲我不能 –

相關問題