我试图用片段创建一个Viewpager。
我有4个与我的问题有关的活动。
这是第一个活动(Viewpageractivity是第二个活动):
package com.exple.v1;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class MovieActionGenreActivity extends ActionBarActivity {
LayoutInflater inflater;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
populateListView();
registerClickCallback();
}
private void registerClickCallback() {
ListView list = (ListView)findViewById(R.id.listView1);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Intent intent;
switch(position)
{
case 1:
intent = new Intent(MovieActionGenreActivity.this,ViewpagerActivity.class);
startActivity(intent);
break;
case 2:
intent = new Intent(MovieActionGenreActivity.this,MovieAnimationGenreActivity.class);
startActivity(intent);
break;
case 3:
intent = new Intent(MovieActionGenreActivity.this,MovieComedyGenreActivity.class);
startActivity(intent);
break;
case 4:
intent = new Intent(MovieActionGenreActivity.this,MovieDocumentaryGenreActivity.class);
startActivity(intent);
break;
case 5:
intent = new Intent(MovieActionGenreActivity.this,MovieHorrorGenreActivity.class);
startActivity(intent);
break;
case 6:
intent = new Intent(MovieActionGenreActivity.this,MovieDramaGenreActivity.class);
startActivity(intent);
break;
default:
break;
}
}
});
}
private void populateListView() {
String[] textz = {"Komedi","Äventyr","Western","Drama","Thriller","Fantasy"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.the_list, textz);
ListView listView = (ListView)findViewById(R.id.listView1);
listView.setAdapter(adapter);
inflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View header = inflater.inflate(R.layout.header_movies_maingenres,null);
listView.addHeaderView(header,null,false);
TextView txt = (TextView)findViewById(R.id.textView1);
txt.setText("Huvudgenrer:Action");
TextView txt2 = (TextView)findViewById(R.id.textView2);
txt2.setText("Välj en genre inom Action");
}
}
此活动显示带有标题的列表视图,只有通过列表中的第一个对象,您才能访问我的viewpager。(我故意这样做只是为了首先进行测试)
这是我的Viewpageractivity:
package com.exple.v1;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBarActivity;
public class ViewpagerActivity extends ActionBarActivity {
ViewPager pager;
ViewpagerAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pager = (ViewPager)findViewById(R.id.viewpager);
adapter = new ViewpagerAdapter(getSupportFragmentManager());
pager.setAdapter(adapter);
}
}
剩下的两个活动是Viewpageradapter,它是我的viewpager的适配器,最后一个是称为ViewpagerFragment的片段。
这是我的适配器语法:
package com.exple.v1;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
public class ViewpagerAdapter extends FragmentStatePagerAdapter{
int[] image = {};
public ViewpagerAdapter(FragmentManager fm)
{
super(fm);
}
@Override
public Fragment getItem(int position) {
// TODO Auto-generated method stub
return new ViewpagerFragment();
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return 5;
}
}
这是我的片段类:
package com.exple.v1;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class ViewpagerFragment extends Fragment{
public ViewpagerFragment()
{
}
public View onCreateView(LayoutInflater inflater,ViewGroup container,
Bundle savedInstanceState)
{
View rootView = inflater.inflate(R.layout.viewpager_item,
container, false);
return rootView;
}
}
并且由于某种原因,出现了一条错误消息。这是logcat的全部错误:
05-02 09:05:51.580: E/AndroidRuntime(32031): FATAL EXCEPTION: main
05-02 09:05:51.580: E/AndroidRuntime(32031): Process: com.exple.v1, PID: 32031
05-02 09:05:51.580: E/AndroidRuntime(32031): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.exple.v1/com.exple.v1.ViewpagerActivity}: java.lang.NullPointerException
05-02 09:05:51.580: E/AndroidRuntime(32031): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305)
05-02 09:05:51.580: E/AndroidRuntime(32031): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363)
05-02 09:05:51.580: E/AndroidRuntime(32031): at android.app.ActivityThread.access$900(ActivityThread.java:161)
05-02 09:05:51.580: E/AndroidRuntime(32031): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
05-02 09:05:51.580: E/AndroidRuntime(32031): at android.os.Handler.dispatchMessage(Handler.java:102)
05-02 09:05:51.580: E/AndroidRuntime(32031): at android.os.Looper.loop(Looper.java:157)
05-02 09:05:51.580: E/AndroidRuntime(32031): at android.app.ActivityThread.main(ActivityThread.java:5356)
05-02 09:05:51.580: E/AndroidRuntime(32031): at java.lang.reflect.Method.invokeNative(Native Method)
05-02 09:05:51.580: E/AndroidRuntime(32031): at java.lang.reflect.Method.invoke(Method.java:515)
05-02 09:05:51.580: E/AndroidRuntime(32031): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
05-02 09:05:51.580: E/AndroidRuntime(32031): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
05-02 09:05:51.580: E/AndroidRuntime(32031): at dalvik.system.NativeStart.main(Native Method)
05-02 09:05:51.580: E/AndroidRuntime(32031): Caused by: java.lang.NullPointerException
05-02 09:05:51.580: E/AndroidRuntime(32031): at com.exple.v1.ViewpagerActivity.onCreate(ViewpagerActivity.java:19)
05-02 09:05:51.580: E/AndroidRuntime(32031): at android.app.Activity.performCreate(Activity.java:5426)
05-02 09:05:51.580: E/AndroidRuntime(32031): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
05-02 09:05:51.580: E/AndroidRuntime(32031): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269)
05-02 09:05:51.580: E/AndroidRuntime(32031): ... 11 more
按照我的解释,我应该得到一个viewpager,该页面应该向我显示5个浏览页面(如果您想知道为什么只有5个,请参阅适配器)
我做错了什么?
在ViewpagerActivity
您使用不带的不正确布局的情况下ViewPager
,因此,寻呼机为null并收到NullPointerException
。
将onCreate
您的方法更改ViewpagerActivity
为此:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.viewpagers);
pager = (ViewPager)findViewById(R.id.viewpager);
adapter = new ViewpagerAdapter(getSupportFragmentManager());
pager.setAdapter(adapter);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句