2013-12-11 92 views
1

我一直在處理一個Android活動,其中包含一個ViewPager,上面有10個圖像,下面的圖像視圖將在單擊時顯示ViewPager的圖像。Android viewpager活動問題

當我嘗試通過我的登錄屏幕進入後運行它,交易崩潰。

我不確定在哪裏錯誤LogCat警告,所以如果你能幫助我,我會非常感激。

下面是logcat的消息:

FATAL EXCEPTION: main 
java.lang.NullPointerException 
at com.example.logger.SecondActivity$MyPagerAdapter.setPrimaryItem (SecondActivity.java:80) 
at android.support.v4.view.ViewPager.populate (ViewPager.java:1066) 
at android.support.v4.view.ViewPager.populate (ViewPager.java:914) 
at android.support.v4.view.ViewPager.onMeasure (ViewPager.java:1436) 
at android.view.View.measure (View.java:15848) 
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:728) 
at android.widget.RelativeLayout.onMeasure (RelativeLayout.java:477) 
at android.view.View.measure (View.java:15848) 
at android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5012) 
at com.android.internal.widget.ActionBarOverLayout.onMeasure(ActionBarOverLayout.java:302) 
at android.view.View.measure (View.java:15848) 
at android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5012) 
at android.widget.FrameLayout.onMeasure (FrameLayout.java:310) 
at android.view.View.measure (View.java:15848) 

SecondActivity.java

package com.example.logger; 

import android.os.Bundle; 
import android.annotation.SuppressLint; 
import android.app.Activity; 
import android.app.Fragment; 
import android.app.FragmentManager; 
import android.content.DialogInterface; 
import android.content.DialogInterface.OnClickListener; 
import android.support.v4.app.FragmentStatePagerAdapter; 
import android.support.v4.view.PagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.View; 
import android.widget.ImageView; 
import android.view.ViewGroup; 

public class SecondActivity extends Activity { 

    private static final int NUM_PAGES = 10; 

    private ViewPager mpager; 

    private MyPagerAdapter mPagerAdapter; 
    private int [] pics = {R.drawable.android_interfaz_layout_estructura_final, R.drawable.baixa, R.drawable.baixada, R.drawable.greenprogressbar, 
      R.drawable.layout_keyboard, R.drawable.linerlay, R.drawable.merge1, R.drawable.o2zds, R.drawable.regbd, 
      R.drawable.s7qrs}; 

    @SuppressLint("NewApi") 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_second); 
     mPagerAdapter = new MyPagerAdapter(null); 
     mpager = (ViewPager) findViewById(R.id.viewer); 
     mpager.setAdapter (mPagerAdapter); 
    } 

    public void showImage (int position, View view) 
    { 
     //View is your view that you returned from instantiateItem 
     //and position is it's position in array you can get the image resource id 
     //using this position and set it to the ImageView 
    } 

    private class MyPagerAdapter extends PagerAdapter 
    { 

     SecondActivity activity; 
     public MyPagerAdapter (SecondActivity activity){ 
      this.activity=activity; 
     } 


     @Override 
     public int getCount() { 
      // TODO Auto-generated method stub 
      return pics.length; 
     } 

     @Override 
     public boolean isViewFromObject(View arg0, Object arg1) { 
      // TODO Auto-generated method stub 
      return false; 
     } 

     @Override 
     public Object instantiateItem(View collection, int position) { 
      ImageView view = new ImageView (SecondActivity.this); 
      view.setImageResource (pics[position]); 
      ((ViewPager) collection).addView(view, 0); 
      return view; 
     } 

     @Override 
     public void setPrimaryItem (ViewGroup container, int position, Object object) 
     { 
      super.setPrimaryItem (container, position, object); 
      activity.showImage(position,(View)object); 
     } 

     } 


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


    private OnClickListener mPageClickListener = new OnClickListener() 
    { 
    public void onClick (View v) 
    { 
     // TODO Auto-generated method stub 
     //aquí anirà la funció per traslladar la image de la gallery a la pantalla 
     Integer picId = (Integer) v.getTag(); 
     mpager.setVisibility(View.VISIBLE); 
     mpager.setCurrentItem(v.getId()); 

    } 

    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     // TODO Auto-generated method stub 

    } 

     }; 
} 

結束SecondActivity.java

Activity_Second.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".SecondActivity" > 


    <android.support.v4.view.ViewPager 
     android:padding="16dp" 
     android:id="@+id/viewer" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="10dp" 
     android:layout_weight="0.30" 
     /> 

    <ImageView 

     android:id="@+id/big_image" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="10dp" 
     android:layout_below="@+id/viewer" 
     android:layout_weight="0.70" 

     /> 

</RelativeLayout> 

末Activity_Second.xml

以防萬一,我將添加在MainActivity爲好。

Main_Activity.java

package com.example.logger; 

import android.os.Bundle; 
import android.app.Activity; 
import android.content.Intent; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 

public class MainActivity extends Activity implements OnClickListener { 

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

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


    private void attachHandlers() { 
     findViewById(R.id.login).setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View arg0) { 
     if(arg0.getId() == R.id.login) 
     { 
      Intent i = new Intent(this, SecondActivity.class); 
      startActivity(i);  
     } 

    } 

} 

結束MainActivity.java

activity_main.xml中

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:orientation="vertical" 
    tools:context=".MainActivity" > 

     <Button 
     android:id="@+id/login" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/Login" 
     android:layout_alignParentBottom="true" 
     android:background="@drawable/shapes" 
     android:textColor="@color/text" 
     /> 

    <EditText 
     android:id="@+id/username" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:hint="@string/input_u" 
     android:layout_marginTop="10dp" 
     android:textColor="@color/text" 
     /> 

    <EditText 
     android:id="@+id/password" 
     android:layout_below="@+id/username" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:hint="@string/input_p" 
     android:layout_marginTop="10dp" 
     android:textColor="@color/text" 
     /> 

</RelativeLayout> 

結束activity_main.xml中

如果我能夠獲得有關如何解決這些問題的一些見解,我將不勝感激。

此致敬禮

毛羅。

回答

0

更改此

mPagerAdapter = new MyPagerAdapter(null) 

mPagerAdapter = new MyPagerAdapter(SecondActivity.this) 

的構造看起來像

public MyPagerAdapter (SecondActivity activity){ 
      this.activity=activity; //activity is null 
     } 

最有可能的線80 SecondActivity.java是activity.showImage(position,(View)object);activity爲空。

更改Pageradapter代碼

class MyPagerAdapter extends PagerAdapter{ 

     MyPagerAdapter (Context context) { 


     } 

     @Override 
     public void destroyItem(View container, int position, Object object) { 
      ((ViewPager) container).removeView((View) object); 
     } 
     @Override 
     public int getCount() { 
      return pics.length; 
     } 

     @Override 
     public Object instantiateItem(View collection, int position) { 
      ImageView iv = new ImageView(SecondActivity.this); 
      ((ViewPager) collection).addView(iv, 0); 
      iv.setImageResource(pics[position]); 
      return iv; 

     } 

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

     } 
+0

非常感謝你:現在它不倒塌尚未...顯示沒有導通屏幕。我是否錯過了必須編入佈局的東西,或許? – user3082271

+0

@ user3082271 showimage中沒有任何東西是無用的 – Raghunandan

+0

@Raghunadan:我需要添加什麼才能讓它起作用? – user3082271

0

現在運轉

public class SecondActivity extends Activity { 

private static final int NUM_PAGES = 10; 

private ViewPager mpager; 

private MyPagerAdapter mPagerAdapter; 
private int[] pics = { R.drawable.flower1, R.drawable.flower10, 
     R.drawable.flower11, R.drawable.flower13, R.drawable.flower2, 
     R.drawable.flower6, R.drawable.flower8, R.drawable.flower7, 
     R.drawable.image3, R.drawable.flower3 }; 

@SuppressLint("NewApi") 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_second); 
    mPagerAdapter = new MyPagerAdapter(this,pics); 
    mpager = (ViewPager) findViewById(R.id.viewer); 
    mpager.setAdapter(mPagerAdapter); 
} 

public void showImage(int position, View view) { 
    // View is your view that you returned from instantiateItem 
    // and position is it's position in array you can get the image resource 
    // id 
    // using this position and set it to the ImageView 
} 

private class MyPagerAdapter extends PagerAdapter { 

    Activity activity; 
    int imageArray[]; 

    public MyPagerAdapter(SecondActivity act, int[] imgArra) { 
     imageArray = imgArra; 
     activity = act; 
    } 

    public int getCount() { 
     return imageArray.length; 
    } 

    public Object instantiateItem(View collection, int position) { 
     ImageView view = new ImageView(activity); 
     System.out.println(position); 
      view.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, 
      LayoutParams.FILL_PARENT)); 
      view.setScaleType(ScaleType.FIT_XY); 
      view.setBackgroundResource(imageArray[position]); 
      ((ViewPager) collection).addView(view, 0); 
     return view; 
    } 

    @Override 
    public void destroyItem(View arg0, int arg1, Object arg2) { 
     ((ViewPager) arg0).removeView((View) arg2); 
    } 

    @Override 
    public boolean isViewFromObject(View arg0, Object arg1) { 
     return arg0 == ((View) arg1); 
    } 

    @Override 
    public Parcelable saveState() { 
     return null; 
    } 

} 

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

private OnClickListener mPageClickListener = new OnClickListener() { 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     // aquí anirà la funció per traslladar la image de la gallery a la 
     // pantalla 
     Integer picId = (Integer) v.getTag(); 
     mpager.setVisibility(View.VISIBLE); 
     mpager.setCurrentItem(v.getId()); 

    } 

    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     // TODO Auto-generated method stub 

    } 

}; 

}

+0

非常感謝:現在它還沒有崩潰......沒有任何東西顯示在屏幕上。我是否錯過了必須編入佈局的東西,或許? – user3082271

0

你得到,因爲沒有得到活動的背景下您的MyPagerAdapter

類的空指針錯誤

更改您在您的初始化SecondActivity的適配器如下:」

取而代之的是

mPagerAdapter = new MyPagerAdapter(null); 

做這個

mPagerAdapter = new MyPagerAdapter(SecondActivity.this) 
+0

非常感謝。 – user3082271

+0

總是很高興提供幫助。投票答案,如果它有幫助。正如我投票你的問題@ user3082271 – GrIsHu