我如何添加preference屏幕Viewpager? [英] How Do I Add Preference Screen to Viewpager?

查看:141
本文介绍了我如何添加preference屏幕Viewpager?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是小白Android开发,我有一点显示viewpager一个preference屏幕的一个问题。目前,我的应用程序是显示混乱的作为与preference屏幕作为背景一页viewpager的所有页面。然后,当我的手势,应用程序崩溃是由于一个InflateException。我已经研究了潜在的原因与这里和<一的SO问题 href=\"http://stackoverflow.com/questions/5765412/android-app-crashes-immediately-when-$p$pferences-screen-is-started\">here但没有提供解决方案,纠正我的问题。我只想用preference片段,但我制定分8 API。任何帮助是极大的AP preciated。

我的code

 公共类选项扩展preferenceActivity实现OnClickListener,共享preferences.OnShared $ P $ {pferenceChangeListenerActionBarSherlock mSherlock = ActionBarSherlock.wrap(本);
查看视图。@覆盖
公共无效的onCreate(捆绑savedInstanceState){
    setTheme(R.style.Theme_Sherlock);
    super.onCreate(savedInstanceState);   加preferencesFromResource(R.xml preFS);
   $p$pferenceManager.getDefaultShared$p$pferences(this).registerOnShared$p$pferenceChangeListener(this);    mSherlock.setContentView(R.layout.options);MyPagerAdapter适配器=新MyPagerAdapter(本);
ViewPager myPager =(ViewPager)findViewById(R.id.viewpager);
myPager.setAdapter(适配器);
myPager.setCurrentItem(2);
TitlePageIndicator指标=(TitlePageIndicator)findViewById(R.id.indicator);
indicator.setViewPager(myPager);
indicator.setOnPageChangeListener(新ViewPager.OnPageChangeListener(){
    @覆盖
    公共无效使用onPageSelected(INT位置){          如果(位置== 0 ||位置== 1 ||位置== 2 ||位置== 4){          }
    }    @覆盖
    公共无效onPageScrolled(INT位置,浮positionOffset,诠释positionOffsetPixels){
    }    @覆盖
    公共无效onPageScrollStateChanged(INT状态){
    }
});
}私有类MyPagerAdapter扩展PagerAdapter {    私有String []标题=新的String [] {HELP,preFERENCES,关于};
私人最终上下文的背景下;
私人诠释[] =的scrollPosition新INT [titles.length]公共MyPagerAdapter(上下文的背景下)
{
    this.context =背景;
    的for(int i = 0; I&LT; titles.length;我++)
    {
        的scrollPosition [I] = 0;
    }
}@覆盖
公共字符串getPageTitle(INT位置)
{
    回到标题[位置]
}@覆盖
公众诠释getCount将()
{
    返回titles.length;
}    公共对象instantiateItem(查看收集,INT位置){        LayoutInflater吹气=(LayoutInflater)collection.getContext()getSystemService(Context.LAYOUT_INFLATER_SERVICE)。
        INT渣油= 0;
        开关(位置){
        案例2:
            渣油= R.layout.help;
            鉴于= inflater.inflate(渣油,NULL);
            的LinearLayout layout0 =(的LinearLayout)view.findViewById(R.id.helplayout);
            ((ViewPager)集合).addView(查看,0);
            返回视图。        情况下0:
            渣油= R.xml preFS。
            鉴于= inflater.inflate(渣油,NULL);
            的LinearLayout布局1 =(的LinearLayout)view.findViewById(R.id.RLcoins);
            ((ViewPager)集合).addView(查看,0);
            返回视图。        情况1:
            渣油= R.layout.about;
            鉴于= inflater.inflate(渣油,NULL);
            的LinearLayout布局2 =(的LinearLayout)view.findViewById(R.id.LLtwitter);
            ((ViewPager)集合).addView(查看,0);
            返回视图。        }
        返回渣油;    }

我的logcat

  16 11-27:00:50.039:E / AndroidRuntime(3993):致命异常:主要
11-27 16:00:50.039:E / AndroidRuntime(3993):android.view.InflateException:二进制XML文件行#2:错误充气类preferenceScreen
11-27 16:00:50.039:E / AndroidRuntime(3993):在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:581)
11-27 16:00:50.039:E / AndroidRuntime(3993):在android.view.LayoutInflater.inflate(LayoutInflater.java:386)
11-27 16:00:50.039:E / AndroidRuntime(3993):在android.view.LayoutInflater.inflate(LayoutInflater.java:320)
11-27 16:00:50.039:E / AndroidRuntime(3993):在android.view.LayoutInflater.inflate(LayoutInflater.java:276)
11-27 16:00:50.039:E / AndroidRuntime(3993):在com.bryanjrichardson.GSCC.Options $ MyPagerAdapter.instantiateItem(Options.java:130)
11-27 16:00:50.039:E / AndroidRuntime(3993):在android.support.v4.view.PagerAdapter.instantiateItem(PagerAdapter.java:110)
11-27 16:00:50.039:E / AndroidRuntime(3993):在android.support.v4.view.ViewPager.addNewItem(ViewPager.java:692)
11-27 16:00:50.039:E / AndroidRuntime(3993):在android.support.v4.view.ViewPager.populate(ViewPager.java:849)
11-27 16:00:50.039:E / AndroidRuntime(3993):在android.support.v4.view.ViewPager.populate(ViewPager.java:772)
11-27 16:00:50.039:E / AndroidRuntime(3993):在android.support.v4.view.ViewPager.completeScroll(ViewPager.java:1539)
11-27 16:00:50.039:E / AndroidRuntime(3993):在android.support.v4.view.ViewPager.computeScroll(ViewPager.java:1422)
11-27 16:00:50.039:E / AndroidRuntime(3993):在android.view.ViewGroup.drawChild(ViewGroup.java:1562)
11-27 16:00:50.039:E / AndroidRuntime(3993):在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-27 16:00:50.039:E / AndroidRuntime(3993):在android.view.ViewGroup.drawChild(ViewGroup.java:1644)
11-27 16:00:50.039:E / AndroidRuntime(3993):在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-27 16:00:50.039:E / AndroidRuntime(3993):在android.view.ViewGroup.drawChild(ViewGroup.java:1644)
11-27 16:00:50.039:E / AndroidRuntime(3993):在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-27 16:00:50.039:E / AndroidRuntime(3993):在android.view.ViewGroup.drawChild(ViewGroup.java:1644)
11-27 16:00:50.039:E / AndroidRuntime(3993):在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-27 16:00:50.039:E / AndroidRuntime(3993):在android.view.ViewGroup.drawChild(ViewGroup.java:1644)
11-27 16:00:50.039:E / AndroidRuntime(3993):在android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-27 16:00:50.039:E / AndroidRuntime(3993):在android.view.View.draw(View.java:6883)
11-27 16:00:50.039:E / AndroidRuntime(3993):在android.widget.FrameLayout.draw(FrameLayout.java:357)
11-27 16:00:50.039:E / AndroidRuntime(3993):在com.android.internal.policy.impl.PhoneWindow $ DecorView.draw(PhoneWindow.java:2116)
11-27 16:00:50.039:E / AndroidRuntime(3993):在android.view.ViewRoot.draw(ViewRoot.java:1565)
11-27 16:00:50.039:E / AndroidRuntime(3993):在android.view.ViewRoot.performTraversals(ViewRoot.java:1301)
11-27 16:00:50.039:E / AndroidRuntime(3993):在android.view.ViewRoot.handleMessage(ViewRoot.java:1914)
11-27 16:00:50.039:E / AndroidRuntime(3993):在android.os.Handler.dispatchMessage(Handler.java:99)
11-27 16:00:50.039:E / AndroidRuntime(3993):在android.os.Looper.loop(Looper.java:130)
11-27 16:00:50.039:E / AndroidRuntime(3993):在android.app.ActivityThread.main(ActivityThread.java:3859)
11-27 16:00:50.039:E / AndroidRuntime(3993):在java.lang.reflect.Method.invokeNative(本机方法)
11-27 16:00:50.039:E / AndroidRuntime(3993):在java.lang.reflect.Method.invoke(Method.java:507)
11-27 16:00:50.039:E / AndroidRuntime(3993):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:839)
11-27 16:00:50.039:E / AndroidRuntime(3993):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
11-27 16:00:50.039:E / AndroidRuntime(3993):在dalvik.system.NativeStart.main(本机方法)
11-27 16:00:50.039:E / AndroidRuntime(3993):产生的原因:抛出java.lang.ClassNotFoundException:android.view $ P $装载机pferenceScreen dalvik.system.PathClassLoader[/system/framework/com.google.android.maps.jar:/data/app/com.bryan.GSCC-1.apk]
11-27 16:00:50.039:E / AndroidRuntime(3993):在dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
11-27 16:00:50.039:E / AndroidRuntime(3993):在java.lang.ClassLoader.loadClass(ClassLoader.java:551)
11-27 16:00:50.039:E / AndroidRuntime(3993):在java.lang.ClassLoader.loadClass(ClassLoader.java:511)
11-27 16:00:50.039:E / AndroidRuntime(3993):在android.view.LayoutInflater.createView(LayoutInflater.java:471)
11-27 16:00:50.039:E / AndroidRuntime(3993):在android.view.LayoutInflater.onCreateView(LayoutInflater.java:549)
11-27 16:00:50.039:E / AndroidRuntime(3993):在com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:66)
11-27 16:00:50.039:E / AndroidRuntime(3993):在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:568)


解决方案

您应该使用片段为/关于帮助和的<​​a href =htt​​p://developer.android.com/reference/android/$p$pference /$p$pferenceFragment.html相对=nofollow> preferenceFragment 为preferences。

下面是preferenceFragment教程
http://android-er.blogspot.com.ar/2012/07/example-of-using-$p$pferencefragment.html

I'm a noob to Android development and I am having a bit of an issue showing a preference screen in viewpager. Currently, my app is showing all the pages of the viewpager jumbled up as one page with the preference screen serving as the background. Then, when i gesture, the app crashes due to an InflateException. I have researched the potential causes with the SO questions here and here but none offer solutions that rectify my issue. I would just use Preference fragment, but I'm developing for min 8 API. Any help is greatly appreciated.

MY CODE

public class Options extends PreferenceActivity implements OnClickListener   ,SharedPreferences.OnSharedPreferenceChangeListener{

ActionBarSherlock mSherlock = ActionBarSherlock.wrap(this);
View view;

@Override
public void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.Theme_Sherlock);
    super.onCreate(savedInstanceState);

   addPreferencesFromResource(R.xml.prefs);
   PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this);

    mSherlock.setContentView(R.layout.options);

MyPagerAdapter adapter = new MyPagerAdapter(this);
ViewPager myPager = (ViewPager) findViewById(R.id.viewpager);
myPager.setAdapter(adapter);
myPager.setCurrentItem(2);
TitlePageIndicator indicator = (TitlePageIndicator)findViewById( R.id.indicator ); 
indicator.setViewPager( myPager );
indicator.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageSelected(int position) {

          if(position == 0 ||position == 1||position == 2||position == 4){

          }
    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    }

    @Override
    public void onPageScrollStateChanged(int state) {
    }
});  
}

private class MyPagerAdapter extends PagerAdapter {

    private String[] titles = new String[] {"HELP",  "PREFERENCES", "ABOUT" };
private final Context context;
private int[] scrollPosition = new int[titles.length];

public MyPagerAdapter( Context context )
{
    this.context = context;
    for ( int i = 0; i < titles.length; i++ )
    {
        scrollPosition[i] = 0;
    }
}

@Override
public String getPageTitle( int position )
{
    return titles[position];
}

@Override
public int getCount()
{
    return titles.length;
}



    public Object instantiateItem(View collection, int position) {

        LayoutInflater inflater = (LayoutInflater) collection.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);


        int resId = 0;
        switch (position) {
        case 2:
            resId = R.layout.help;              
            view = inflater.inflate(resId, null);
            LinearLayout layout0=(LinearLayout)view.findViewById(R.id.helplayout);
            ((ViewPager) collection).addView(view, 0);
            return view;

        case 0:
            resId = R.xml.prefs;
            view = inflater.inflate(resId, null);
            LinearLayout layout1=(LinearLayout)view.findViewById(R.id.RLcoins);


            ((ViewPager) collection).addView(view, 0);
            return view;

        case 1:
            resId = R.layout.about;
            view = inflater.inflate(resId, null);
            LinearLayout layout2=(LinearLayout)view.findViewById(R.id.LLtwitter);


            ((ViewPager) collection).addView(view, 0);
            return view;



        }
        return resId;

    }

MY LOGCAT

11-27 16:00:50.039: E/AndroidRuntime(3993): FATAL EXCEPTION: main
11-27 16:00:50.039: E/AndroidRuntime(3993): android.view.InflateException: Binary XML file line #2: Error inflating class PreferenceScreen
11-27 16:00:50.039: E/AndroidRuntime(3993):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:581)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at android.view.LayoutInflater.inflate(LayoutInflater.java:386)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at com.bryanjrichardson.GSCC.Options$MyPagerAdapter.instantiateItem(Options.java:130)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at android.support.v4.view.PagerAdapter.instantiateItem(PagerAdapter.java:110)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:692)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at android.support.v4.view.ViewPager.populate(ViewPager.java:849)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at android.support.v4.view.ViewPager.populate(ViewPager.java:772)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at android.support.v4.view.ViewPager.completeScroll(ViewPager.java:1539)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at android.support.v4.view.ViewPager.computeScroll(ViewPager.java:1422)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at android.view.ViewGroup.drawChild(ViewGroup.java:1562)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at android.view.View.draw(View.java:6883)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at android.widget.FrameLayout.draw(FrameLayout.java:357)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2116)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at android.view.ViewRoot.draw(ViewRoot.java:1565)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at android.view.ViewRoot.performTraversals(ViewRoot.java:1301)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1914)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at android.os.Handler.dispatchMessage(Handler.java:99)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at android.os.Looper.loop(Looper.java:130)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at android.app.ActivityThread.main(ActivityThread.java:3859)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at java.lang.reflect.Method.invokeNative(Native Method)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at java.lang.reflect.Method.invoke(Method.java:507)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at dalvik.system.NativeStart.main(Native Method)
11-27 16:00:50.039: E/AndroidRuntime(3993): Caused by: java.lang.ClassNotFoundException: android.view.PreferenceScreen in loader dalvik.system.PathClassLoader[/system/framework/com.google.android.maps.jar:/data/app/com.bryan.GSCC-1.apk]
11-27 16:00:50.039: E/AndroidRuntime(3993):     at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at android.view.LayoutInflater.createView(LayoutInflater.java:471)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at android.view.LayoutInflater.onCreateView(LayoutInflater.java:549)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:66)
11-27 16:00:50.039: E/AndroidRuntime(3993):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:568)

解决方案

You should use fragments for help/about and a PreferenceFragment for the preferences.

Here's a tutorial for PreferenceFragment http://android-er.blogspot.com.ar/2012/07/example-of-using-preferencefragment.html

这篇关于我如何添加preference屏幕Viewpager?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆