【问题标题】:my viewpager have bad performance in android 6我的 viewpager 在 android 6 中表现不佳
【发布时间】:2017-09-12 05:14:29
【问题描述】:

我使用适配器和活动创建滑块,此代码在 android 4.4 kitkat 中运行良好,但在 android 6 中崩溃甚至不显示图像和.... appcompact 可能有问题吗? 我不知道如何解决这个问题。 适配器

public class ScreenshootsAdapter extends PagerAdapter {

    private int[] image_resources={
           R.drawable.walkthrough1,
            R.drawable.walkthrough2,
            R.drawable.walkthrough3,
            R.drawable.walkthrough4,
            R.drawable.walkthrough5,
            R.drawable.walkthrough6,

    };

    private Context ctx;

    private LayoutInflater layoutInflater;

    public ScreenshootsAdapter(Context ctx){
        this.ctx=ctx;
    }


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

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

    @Override
    public Object instantiateItem(ViewGroup container, int position){
        layoutInflater =(LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View item_view= layoutInflater.inflate(R.layout.screenshoots,container,false);

        ImageView imageView=(ImageView) item_view.findViewById(R.id.slider_image);

        imageView.setImageResource(image_resources[position]);

        container.addView(item_view);

        return item_view;
    }

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

活动

public class AppTutorialActivity extends AppCompatActivity {

    ViewPager viewPager;
    ScreenshootsAdapter adapter;
    Typeface typeface;

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


        viewPager=(ViewPager) findViewById(R.id.screenshoot_slider);

        adapter=new ScreenshootsAdapter(this);

        viewPager.setAdapter(adapter);

        TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);

        tabLayout.setupWithViewPager(viewPager, true);

        //Button btnBack=(Button)findViewById(R.id.btn_back);
        TextView textBack=(TextView) findViewById(R.id.text_back);

        typeface=Typeface.createFromAsset(getAssets(),"font/IRANSansMobile.ttf");

        textBack.setTypeface(typeface);

        textBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });
        //btnBack.setTypeface(typeface);
    }
}

【问题讨论】:

  • 能否贴出错误的堆栈跟踪

标签: java android layout android-viewpager adapter


【解决方案1】:

在 Strings 文件夹中创建图像数组

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array name="list">
        <item>@drawable/walkthrough1</item>
        <item>@drawable/walkthrough2</item>
        <item>@drawable/walkthrough3</item>
        <item>@drawable/walkthrough4</item>
        <item>@drawable/walkthrough5</item>
        <item>@drawable/walkthrough6</item>
    </array>
</resources>

然后在AppTutorialActivity活动中初始化数组

TypedArray list = getResources().obtainTypedArray(R.array.list);

将数组传递给 ScreenshootsAdapter

public ScreenshootsAdapter(Context ctx,TypedArray list){
    this.ctx=ctx;
    mList=list
}

从 TpedArray 列表中加载图像

imageView.setImageResource(list.getResourceId(position, -1));

还可以尝试使用 glide 或 picasso 等图像加载库,这有助于轻松加载。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    相关资源
    最近更新 更多