簡體   English   中英

為什么 instantiateItem 不調用並且 ViewPager 不工作?

[英]Why instantiateItem doesn't call and ViewPager doesn't work?

我嘗試用滑動圖像制作簡單的應用程序。 我使用這篇文章http://www.androidbegin.com/tutorial/android-viewpager-gallery-images-and-texts-tutorial/

這是我的 xml 和 viewpager:main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <android.support.v4.view.ViewPager
        android:id="@+id/pages"
        android:layout_height="match_parent"
        android:layout_width="match_parent">
    </android.support.v4.view.ViewPager>

</LinearLayout>

這是我的 xml,帶有圖片:item.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <ImageView
        android:id="@+id/image"
        android:layout_gravity="center"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:src="@drawable/ic_launcher" />

</RelativeLayout>

這是我的適配器:ViewerPagerAdapter.java

public class ViewerPagerAdapter extends PagerAdapter {

    private Context mContext;
    private ArrayList<CueModel> mArray;
    private LayoutInflater mInflater;
    private ImageView mImage;

    public ViewerPagerAdapter(Context _context){
        mContext = _context;

        mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }


    public void setArray(ArrayList<Bitmap> arr){
        mArray = arr;
    }

    @Override
    public int getItemPosition(Object object) {  
        return POSITION_NONE;  
    }  

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
          View itemView = mInflater.inflate(R.layout.item, container, false);
          mImage = (ImageView)itemView.findViewById(R.id.image);
          mImage.setImageBitmap(mArray.get(position));
          container.addView(itemView);

          return itemView;
     }

    @Override
    public int getCount() {
        return mArray.size();
    }

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

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

這是我的活動:OneActivity.java(mArrays 充滿圖像)

public class OneActivity extends Activity {
    ArrayList<Bitmap> mArrays;
    ViewerPagerAdapter mAdapter;
    ViewPager mPager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main.xml);
        mPager = (ViewPager) findViewById(R.id.pages);
        mAdapter = new ViewerPagerAdapter(OneActivity.this);
        mAdapter.setArrays(mArrays);
        mPager.setAdapter(mAdapter);
    }
}

我不明白我做錯了什么。 instanceiteItem 不調用。

PS.我的應用程序和

文章我有一些活動(和我的 arraylist 由項目初始化)謝謝

每當 ViewPager 需要新視圖時,就會調用#instantiateItem() 最初,如果適配器的getCount() > 0 ,它將為中心的 View 調用兩次#instantiateItem()並向右查看。 這就是為什么在您的#setArray()方法中每次更改數組時都需要調用#notifyDataSetChanged()的原因。 您還需要在每次從列表中添加或刪除項目時調用它。 如果您的數組在#onCreate()為空,那么#getCount() == 0這樣 ViewPager 就會認為它是空的並且不會打擾。

我知道這是一個很老的帖子,但我正在回答這個問題,因為有人會從中受益。 我遇到了同樣的問題 - 沒有調用instantiateItem () 在嘗試了這么多事情之后,我終於找到了我在代碼中犯的錯誤,這是一個愚蠢的錯誤,我忘記將適配器設置為 viewpager:

viewPager.setAdapter(adapter)

對於錯誤消息為的現代版本 (2020+)

二進制 XML 文件行 #(lineNumber):在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817) 處膨脹類 android.viewpager.widget.ViewPager 時出錯

你可能想要更新

android.support.v4.view.ViewPager 到

androidx.viewpager.widget.ViewPager

就我而言,列表的大小為零。 因此,這個方法沒有被調用。 當列表不為空時,它可以正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM