NullPointer-Ausnahme auf setAdapter für Viewpager
In einem Bildschirm, ich bin mit zwei viewPagers - eine für Bild autoscroling und andere Tasten für Bildlauf. Bild den automatischen Bildlauf arbeiten war absolut in Ordnung, aber wenn ich fügte hinzu, die Umsetzung für die Tasten auf der viewPager, meine Anwendung gestartet, Absturz für nullpointer auf setAdapter, ich bin mit fragmentPagerAdapter.
Für Bilder autoslider ich bin mit diesem Referenz code
https://github.com/JakeWharton/Android-ViewPagerIndicator
Hier ist mein source code
layout-xml-Datei simple_circles.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<!-- android:layout_weight="0.01" -->
<SearchView
android:id="@+id/search_view"
android:layout_width="fill_parent"
android:layout_height="80dp" >
</SearchView>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="fill_parent"
android:layout_height="400dp">
</android.support.v4.view.ViewPager>
<android.support.v4.view.ViewPager
android:id="@+id/pager_for_buttons"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
</android.support.v4.view.ViewPager>
fragment für das hinzufügen von Tasten auf der slider -
public class ScreenSlidePageFragment extends Fragment {
public static final String ARG_PAGE = "page";
private int mPageNumber;
public static Fragment create(int pageNumber) {
ScreenSlidePageFragment fragment = new ScreenSlidePageFragment();
Bundle args = new Bundle();
args.putInt(ARG_PAGE, pageNumber);
fragment.setArguments(args);
return fragment;
}
public ScreenSlidePageFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mPageNumber = getArguments().getInt(ARG_PAGE);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//Inflate the layout containing a title and body text.
Button music_button = new Button(getActivity());
music_button.setText("Music");
Button news_button = new Button(getActivity());
news_button.setText("News");
Button videos_button = new Button(getActivity());
videos_button.setText("Videos");
Button photos_button = new Button(getActivity());
photos_button.setText("Photos");
LinearLayout layout = new LinearLayout(getActivity());
layout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
//layout.setGravity(Gravity.CENTER);
layout.addView(music_button);
layout.addView(news_button);
layout.addView(videos_button);
layout.addView(photos_button);
return layout;
}
public int getPageNumber() {
return mPageNumber;
}
}
Activity-Klasse und adapter für viewPager -
public class SampleCirclesDefault extends FragmentActivity {
//Initialization
TestFragmentAdapter mAdapter;
ViewPager mPager;
PageIndicator mIndicator;
Bitmap bitmap;
ArrayList<String> bandImagesList;
ImageView build_bandapp_img;
boolean pagerMoved;
Runnable Update;
Handler h;
long ANIM_VIEWPAGER_DELAY;
Handler handler;
int NUM_PAGES = 5;
ViewPager buttonPager;
ScreenSlidePagerAdapter buttonAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//No action bar
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
**setContentView(R.layout.simple_circles);**
build_bandapp_img = (ImageView) findViewById(R.id.imageView_for_webview);
build_bandapp_img.setOnClickListener(new OnClickListener() {
//Build bandapp button
@Override
public void onClick(View v) {
Intent i = new Intent(SampleCirclesDefault.this,
BandDetailedActivity.class);
startActivity(i);
}
});
mAdapter = new TestFragmentAdapter(getSupportFragmentManager());//adapter
//for
//viewpager
mPager = (ViewPager) findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
buttonAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
//buttonAdapter = new AdapterForFragmentOfButtonSlider(getSupportFragmentManager());
buttonPager = (ViewPager)findViewById(R.id.pager_for_buttons);
buttonPager.setAdapter(buttonAdapter); //***error -NullPointerException***//
mIndicator = (CirclePageIndicator) findViewById(R.id.indicator);
mIndicator.setViewPager(mPager);//dot dot indicator
buttonPager.setCurrentItem(1);
handler = new Handler();
//autoscrolling of view pager
Update = new Runnable() {
int currentPage = mPager.getCurrentItem();
public void run() {
if (currentPage == NUM_PAGES - 1) {
currentPage = 0;
}
mPager.setCurrentItem(currentPage++, true);
}
};
Timer swipeTimer = new Timer();
swipeTimer.schedule(new TimerTask() {
@Override
public void run() {
handler.post(Update);
}
}, 100, 5000);
}
private class ScreenSlidePagerAdapter extends FragmentPagerAdapter {
public ScreenSlidePagerAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
}
@Override
public Fragment getItem(int position) {
return ScreenSlidePageFragment.create(position);
}
@Override
public int getCount() {
return NUM_PAGES;
}
}
}
Stack-trace
01-23 13:56:57.067: W/dalvikvm(18861): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
01-23 13:56:57.098: E/AndroidRuntime(18861): FATAL EXCEPTION: main
01-23 13:56:57.098: E/AndroidRuntime(18861): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.viewpagerindicator.sample/com.viewpagerindicator.sample.SampleCirclesDefault}: java.lang.NullPointerException
01-23 13:56:57.098: E/AndroidRuntime(18861): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
01-23 13:56:57.098: E/AndroidRuntime(18861): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
01-23 13:56:57.098: E/AndroidRuntime(18861): at android.app.ActivityThread.access$600(ActivityThread.java:141)
01-23 13:56:57.098: E/AndroidRuntime(18861): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
01-23 13:56:57.098: E/AndroidRuntime(18861): at android.os.Handler.dispatchMessage(Handler.java:99)
01-23 13:56:57.098: E/AndroidRuntime(18861): at android.os.Looper.loop(Looper.java:137)
01-23 13:56:57.098: E/AndroidRuntime(18861): at android.app.ActivityThread.main(ActivityThread.java:5041)
01-23 13:56:57.098: E/AndroidRuntime(18861): at java.lang.reflect.Method.invokeNative(Native Method)
01-23 13:56:57.098: E/AndroidRuntime(18861): at java.lang.reflect.Method.invoke(Method.java:511)
01-23 13:56:57.098: E/AndroidRuntime(18861): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
01-23 13:56:57.098: E/AndroidRuntime(18861): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
01-23 13:56:57.098: E/AndroidRuntime(18861): at dalvik.system.NativeStart.main(Native Method)
01-23 13:56:57.098: E/AndroidRuntime(18861): Caused by: java.lang.NullPointerException
01-23 13:56:57.098: E/AndroidRuntime(18861): at com.viewpagerindicator.sample.SampleCirclesDefault.onCreate(SampleCirclesDefault.java:85)
01-23 13:56:57.098: E/AndroidRuntime(18861): at android.app.Activity.performCreate(Activity.java:5104)
01-23 13:56:57.098: E/AndroidRuntime(18861): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
01-23 13:56:57.098: E/AndroidRuntime(18861): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
01-23 13:56:57.098: E/AndroidRuntime(18861): ... 11 more
01-23 13:57:13.356: I/Process(18861): Sending signal. PID: 18861 SIG: 9
Habe ich darauf wo genau ich bin immer Fehler.
Mir bitte helfen diesen Fehler zu beheben, vielen Dank im Voraus.
- Entweder Ihr
buttonPager
oderbuttonAdapter
null ist, ich denke, IhrbuttonAdapter
null ist. Werden Sie sicher, dass es instanziiert ist richtig. - ja ich fühle auch dasselbe, aber ich nicht herausfinden, wo das problem ist, aber ich vergeudete einen ganzen Tag in diesem und coldnt finden, was falsch ist
- wo ist setContentView für Aktivität
- Nein, buttonAdapter null würde nicht zu einer NPE an dieser bestimmten Linie, sondern irgendwo im inneren des setAdapter Methode. buttonPager ist die einzige Sache, die null sein kann, auf diese Linie.
- könnte eine compilation Problem, oder eine layout-* Problem. Ist dieses layout die einzige version, die Sie haben ? haben, reinigen Sie Ihr Projekt ?
- auch das layout gepostet der nicht eine Bildansicht und die id referenziert zu sein scheint das richtige für
buttonPager
. - überprüfen Sie die buttonAdapter und buttonPager für null. ich denke immer noch, buttonAdapter sollte null sein, weil buttonPager ist im gleichen layout, mit anderen, und buttonPager darf nicht null sein. Aber immer noch auf null prüfen ersten.
- op hat
buttonAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager())
- wenn die adapter waren null, die Ausnahme würde nicht auftreten, bei dieser speziellen Zeile, sondern in der setAdapter Methode.
- ja, es war, weil von verschiedenen layout-Dateien-danke für die Hilfe
- Beantworten Sie die Frage so, dass ich mark es richtig
Du musst angemeldet sein, um einen Kommentar abzugeben.
Also, wenn
buttonPager
ist null, Sie haben einen layout, das nicht über einebuttonPager
.Dies bestätigt, was ich schon früher kommentiert.
Überprüfen Sie auch diese
http://developer.android.com/training/animation/screen-slide.html
SampleCirclesDefault.java:85
?buttonAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager())
?buttonPager
null ist. auch reinigen Sie und bauen Sie einmal. Auch th exml gepostet hat eine Bildansicht. das richtige layout aufgeblasen??