2015-06-22 4 views
-1

Что не так в моем коде? Я пытался много раз и примеров, но ошибка осталась здесь. Кто-нибудь может мне помочь? Я искал веб-и stackoverflow, но ничего не нашел о своей проблеме.Android NullPointerException setAdapter ViewPager

Это мой код:

MainActivity.java

@Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     Intent intent = new Intent(this, DetailActivity.class); 
     intent.putExtra(DetailActivity.EXTRA_IMAGE, (int) position); 
     startActivity(intent); 
    } 

DetailActivity.java

public class DetailActivity extends FragmentActivity { 

    public static final String EXTRA_IMAGE = "extra_image"; 

    CustomPagerAdapter mCustomPagerAdapter; 
    ViewPager mViewPager; 
    int index; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_detail); 

     Intent intent = getIntent(); 
     index = intent.getIntExtra(EXTRA_IMAGE, 0); 

     mCustomPagerAdapter = new CustomPagerAdapter(DetailActivity.this, MainActivity.mFilePath, index); 
     mViewPager = (ViewPager) findViewById(R.id.pager); 
     mViewPager.setAdapter(mCustomPagerAdapter); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_detail, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    class CustomPagerAdapter extends PagerAdapter { 

     Context mContext; 
     LayoutInflater mLayoutInflater; 
     int index; 
     Vector<String> images; 

     public CustomPagerAdapter(Context context, Vector<String> images, int index) { 
      this.mContext = context; 
      this.images = images; 
      this.index = index; 
      mLayoutInflater = (LayoutInflater) mContext.getSystemService(context.LAYOUT_INFLATER_SERVICE); 
     } 

     @Override 
     public int getCount() { 
      return MainActivity.mFilePath.size(); 
     } 

     @Override 
     public boolean isViewFromObject(View view, Object object) { 
      return view == ((LinearLayout) object); 
     } 

     @Override 
     public Object instantiateItem(ViewGroup container, int position) { 
      View itemView = mLayoutInflater.inflate(R.layout.page_adapter, container, false); 
      ImageView imageView = (ImageView) itemView.findViewById(R.id.image_full); 
      imageView.setImageBitmap(BitmapFactory.decodeFile(MainActivity.mFilePath.elementAt(position))); 
      container.addView(itemView); 

      return itemView; 
     } 

     @Override 
     public void destroyItem(ViewGroup container, int position, Object object) { 
      ((ViewPager) container).removeView((RelativeLayout) object); 
     } 
    } 
} 

page_adapter.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 
    <ImageView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:id="@+id/image_full"/> 
</LinearLayout> 

pager.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.view.ViewPager 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

</android.support.v4.view.ViewPager> 

И это ошибка:

06-22 16:28:45.853 5995-5995/ua.zp.eldorado.testapp E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{ua.zp.eldorado.testapp/ua.zp.eldorado.testapp.DetailActivity}: java.lang.NullPointerException 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2309) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2366) 
      at android.app.ActivityThread.access$600(ActivityThread.java:156) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1343) 
      at android.os.Handler.dispatchMessage(Handler.java:99) 
      at android.os.Looper.loop(Looper.java:153) 
      at android.app.ActivityThread.main(ActivityThread.java:5330) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:511) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608) 
      at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.NullPointerException 
      at ua.zp.eldorado.testapp.DetailActivity.onCreate(DetailActivity.java:40) 
      at android.app.Activity.performCreate(Activity.java:5135) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2273) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2366) 
            at android.app.ActivityThread.access$600(ActivityThread.java:156) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1343) 
            at android.os.Handler.dispatchMessage(Handler.java:99) 
            at android.os.Looper.loop(Looper.java:153) 
            at android.app.ActivityThread.main(ActivityThread.java:5330) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:511) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608) 
            at dalvik.system.NativeStart.main(Native Method) 
+0

пейджер находится в неправильной раскладке, или, по крайней мере, это выглядит таким образом, что вы разместил – Blackbelt

ответ

0

Я думаю, что проблема в вас макет не исправить, то mViewPager переменная равна нулю и exception происходит путем

mViewPager.setAdapter(mCustomPagerAdapter); 

пытаются заменить

setContentView(R.layout.activity_detail); 

по

setContentView(R.layout.pager); 

с activity_detail.xmlAndroidOS не может найти элемент с идентификатором pager того mViewPager это получить значение, как null

+0

Спасибо вам матч. Это работает. – Xazan

0

Похоже, ваш NPE вызвано этой линии

index = intent.getIntExtra(EXTRA_IMAGE, 0); 

Попробуйте заменить его

Integer.parseInt(getIntent().getExtras().get("EXTRA_IMAGE").ToString()); 
Смежные вопросы