Android: Viewpager 无法转换为 LinearLayout

Android: Viewpager cannot cast to LinearLayout

您好,我正在使用 viewpager 来显示图像幻灯片。我正在使用截击从网络加载图像和文本。我收到这样的错误。

java.lang.ClassCastException: android.support.v4.view.ViewPager cannot be cast to android.widget.LinearLayout
                                                                     at com.truetech.lola.adapter.HomeCentralPagerAdapter.destroyItem(HomeCentralPagerAdapter.java:70)
                                                                     at android.support.v4.view.ViewPager.populate(ViewPager.java:1111)
                                                                     at android.support.v4.view.ViewPager.populate(ViewPager.java:1025)

我需要在其中显示 viewpager。但它经常显示一些错误。请看看我的代码并告诉我我在哪里做错了。

我的适配器是

public class HomeCentralPagerAdapter extends PagerAdapter {

private Context mContext;
private LayoutInflater mLayoutInflater;
private List<HomeCentralPagerContent> mHomeCentralPagerContents;

public HomeCentralPagerAdapter(Context mContext) {
    this.mContext = mContext;
    mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

public HomeCentralPagerAdapter(Context mContext, List<HomeCentralPagerContent> mHomeCentralPagerContents) {
    this.mContext = mContext;
    this.mHomeCentralPagerContents = mHomeCentralPagerContents;
}

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

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

@Override
public Object instantiateItem(ViewGroup container, int position) {
    mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View itemView = mLayoutInflater.inflate(R.layout.main_activity_pager_layout, container, false);

    //ImageView homeCentralPagerIMV = (ImageView) itemView.findViewById(R.id.homeCentralImage);
    SimpleDraweeView homeCentralDraweeView = (SimpleDraweeView) itemView.findViewById(R.id.homeCentralImage);
    TextView homeCentralPointsTV = (TextView) itemView.findViewById(R.id.homeCentralPoints);
    TextView homeCentralTitleTV = (TextView) itemView.findViewById(R.id.homeCentralPagerTitle);

    HomeCentralPagerContent m = mHomeCentralPagerContents.get(position);
    Uri imageUri = Uri.parse(m.getHomeCentralImage());
    homeCentralDraweeView.setImageURI(imageUri);
    homeCentralPointsTV.setText(m.getHomeCentralPoints());

    ((ViewPager)container).addView(itemView);

    return container;
}

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

我的 Activity 文件是

public class MainActivity extends Activity {

private static final String TAG = "MainActivity";

private PrefManager pref;
private HomeCentralPagerAdapter mHomeCentralPagerAdapter;
private List<HomeCentralPagerContent> pagerContentList = new    ArrayList<HomeCentralPagerContent>();

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

    pref = new PrefManager(getApplicationContext());
    ViewPager mViewPager = (ViewPager) findViewById(R.id.homeCentralViewPager);
    mHomeCentralPagerAdapter = new HomeCentralPagerAdapter(this, pagerContentList);
    getHomeCentralContents();
    mViewPager.setAdapter(mHomeCentralPagerAdapter);
}

private void getHomeCentralContents() {
    String URL = ConstantValues.GetHomeCentralContent + pref.getUserId();
    Log.d(TAG, "Home Central URL: " + URL);

    new NetWorkRequest(MainActivity.this).volleyGetJsonObjectData(URL, new VolleyResponseListerner() {
        @Override
        public void onResponse(JSONObject response) throws JSONException {
            VolleyLog.d(TAG, "Home Central OnResponse: " + response);

            String statusStr = response.getString("Status");
            Log.d(TAG, "Status: " + statusStr);

            if (statusStr.equalsIgnoreCase("Success")) {

                Iterator iterator = response.keys();
                while (iterator.hasNext()) {
                    String key = (String) iterator.next();
                    Log.d(TAG, "Key Value: " + key);
                    if (response.get(key) instanceof JSONArray) {
                        Log.d(TAG, "JSON Array Key: " + key);

                        try {
                            if (!key.equalsIgnoreCase("Point Details")) {
                                JSONArray loopedArray = response.getJSONArray(key);
                                JSONObject jsonObject;

                                for (int i = 0; i < loopedArray.length(); i++) {
                                    jsonObject = loopedArray.getJSONObject(i);

                                    HomeCentralPagerContent homeCentralPagerContent = new HomeCentralPagerContent();
                                    homeCentralPagerContent.setHomeCentralPoints(jsonObject.getString(key + "_Points"));
                                    homeCentralPagerContent.setHomeCentralImage(jsonObject.getString("ImagePath"));

                                    pagerContentList.add(homeCentralPagerContent);
                                }
                            } else {
                                Log.d(TAG, "Exception Due to Points Details Array");
                            }
                        } catch (JSONException e) {
                            Log.e(TAG, "JSON Array Key Exception: " + e);
                        }
                    }
                }

                mHomeCentralPagerAdapter.notifyDataSetChanged();
                Log.d(TAG, "Total Content List: " + pagerContentList);
            }
        }

        @Override
        public void onError(String message, String title) {
            VolleyLog.e(TAG, "Home Central OnErrorResponse: " + message);
        }
    });
}
}

我的 XML 文件是

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fresco="http://schemas.android.com/apk/res-auto"
android:id="@+id/mainPagerParentLay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center">

<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/homeCentralImage"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    fresco:placeholderImage="@drawable/logo_login" />

<RelativeLayout
    android:id="@+id/homeCentralPointsAndTitleLay"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentBottom="true"
    android:layout_marginLeft="33dp"
    android:layout_marginRight="33dp"
    android:layout_marginTop="397dp">

    <TextView
        android:id="@+id/homeCentralPoints"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:background="@drawable/round_counter_bg"
        android:gravity="center"
        android:text=""
        android:textColor="#fff"
        android:textSize="30sp" />

    <TextView
        android:id="@+id/homeCentralPagerTitle"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/homeCentralPoints"
        android:layout_centerVertical="true"
        android:gravity="center"
        android:textColor="@color/dark_grey"
        android:textSize="14sp" />
</RelativeLayout>

</RelativeLayout>

而不是 ((ViewPager)container).addView(itemView);container.addView(itemView);

您应该将新项目添加到 ViewGroup 而不是 ViewPager

此外,((ViewPager)container).removeView((LinearLayout) object); 应该是 container.removeView((RelativeLayout) object);

编辑:

尝试更换您的 View itemView = mLayoutInflater.inflate(R.layout.main_activity_pager_layout, container, false);

View itemView = mLayoutInflater.inflate(R.layout.main_activity_pager_layout, null);

也在你的instantiateItemreturnitemView不是container

更改此行

((ViewPager)container).removeView((LinearLayout) object);

到这个

container.removeView((RelativeLayout) object);