2016-09-21 17 views
2

我已使用ListView,而xml中的父項爲RelativeLayout。 當我在4.4.4上運行應用程序時,它給了我ClassCastException,但是當我在5.0.1或6.0.1上運行它時,它運行時沒有任何錯誤。請查看代碼片段。Android RelativeLayout.LayoutParams無法投射到AbsListview.LayoutParams(錯誤低於4.4.4)在5.0和6.0.1上正常工作

錯誤:

09-21 10:39:16.410 14394-14394/com.spicex E/UncaughtException: java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams 
                    at android.widget.ListView.setupChild(ListView.java:1849) 
                    at android.widget.ListView.makeAndAddView(ListView.java:1816) 
                    at android.widget.ListView.fillDown(ListView.java:697) 
                    at android.widget.ListView.fillFromTop(ListView.java:763) 
                    at android.widget.ListView.layoutChildren(ListView.java:1641) 
                    at android.widget.AbsListView.onLayout(AbsListView.java:2603) 
                    at android.view.View.layout(View.java:15859) 
                    at android.view.ViewGroup.layout(ViewGroup.java:4902) 
                    at android.support.v4.widget.SwipeRefreshLayout.onLayout(SwipeRefreshLayout.java:598) 
                    at android.view.View.layout(View.java:15859) 
                    at android.view.ViewGroup.layout(ViewGroup.java:4902) 
                    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1677) 
                    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1531) 
                    at android.widget.LinearLayout.onLayout(LinearLayout.java:1440) 
                    at android.view.View.layout(View.java:15859) 
                    at android.view.ViewGroup.layout(ViewGroup.java:4902) 
                    at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1055) 
                    at android.view.View.layout(View.java:15859) 
                    at android.view.ViewGroup.layout(ViewGroup.java:4902) 
                    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) 
                    at android.widget.FrameLayout.onLayout(FrameLayout.java:388) 
                    at android.view.View.layout(View.java:15859) 
                    at android.view.ViewGroup.layout(ViewGroup.java:4902) 
                    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1677) 
                    at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1666) 
                    at android.widget.LinearLayout.onLayout(LinearLayout.java:1442) 
                    at android.view.View.layout(View.java:15859) 
                    at android.view.ViewGroup.layout(ViewGroup.java:4902) 
                    at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1191) 
                    at android.view.View.layout(View.java:15859) 
                    at android.view.ViewGroup.layout(ViewGroup.java:4902) 
                    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) 
                    at android.widget.FrameLayout.onLayout(FrameLayout.java:388) 
                    at android.view.View.layout(View.java:15859) 
                    at android.view.ViewGroup.layout(ViewGroup.java:4902) 
                    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1677) 
                    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1531) 
                    at android.widget.LinearLayout.onLayout(LinearLayout.java:1440) 
                    at android.view.View.layout(View.java:15859) 
                    at android.view.ViewGroup.layout(ViewGroup.java:4902) 
                    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) 
                    at android.widget.FrameLayout.onLayout(FrameLayout.java:388) 
                    at android.view.View.layout(View.java:15859) 
                    at android.view.ViewGroup.layout(ViewGroup.java:4902) 
                    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1677) 
                    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1531) 
                    at android.widget.LinearLayout.onLayout(LinearLayout.java:1440) 
                    at android.view.View.layout(View.java:15859) 
                    at android.view.ViewGroup.layout(ViewGroup.java:4902) 
                    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) 
                    at android.widget.FrameLayout.onLayout(FrameLayout.java:388) 
                    at android.view.View.layout(View.java:15859) 
                    at android.view.ViewGroup.layout(ViewGroup.java:4902) 
                    at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2376) 
                    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2089) 
                    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1264) 
                    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6632) 
                    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:813) 
                    at android.view.Choreographer.doCallbacks(Choreographer.java:613) 
                    at android.view.Choreographer.doFrame(Choreographer.java:583) 
                    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:799) 
                    at android.os.Handler.handleCallback(Handler.java:733) 
                    at android.os.Handler.dispatchMessage(Handler.java:95) 
                    at android.os.Looper.loop(Looper.java:146) 
                   at android.app.ActivityThread.main(Activity 
09-21 10:39:16.640 14394-14394/com.spicex E/AndroidRuntime: FATAL EXCEPTION: main 
                  Process: com.spicex, PID: 14394 
                  java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams 
                   at android.widget.ListView.setupChild(ListView.java:1849) 
                   at android.widget.ListView.makeAndAddView(ListView.java:1816) 
                   at android.widget.ListView.fillDown(ListView.java:697) 
                   at android.widget.ListView.fillFromTop(ListView.java:763) 
                   at android.widget.ListView.layoutChildren(ListView.java:1641) 
                   at android.widget.AbsListView.onLayout(AbsListView.java:2603) 
                   at android.view.View.layout(View.java:15859) 
                   at android.view.ViewGroup.layout(ViewGroup.java:4902) 
                   at android.support.v4.widget.SwipeRefreshLayout.onLayout(SwipeRefreshLayout.java:598) 
                   at android.view.View.layout(View.java:15859) 
                   at android.view.ViewGroup.layout(ViewGroup.java:4902) 
                   at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1677) 
                   at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1531) 
                   at android.widget.LinearLayout.onLayout(LinearLayout.java:1440) 
                   at android.view.View.layout(View.java:15859) 
                   at android.view.ViewGroup.layout(ViewGroup.java:4902) 
                   at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1055) 
                   at android.view.View.layout(View.java:15859) 
                   at android.view.ViewGroup.layout(ViewGroup.java:4902) 
                   at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) 
                   at android.widget.FrameLayout.onLayout(FrameLayout.java:388) 
                   at android.view.View.layout(View.java:15859) 
                   at android.view.ViewGroup.layout(ViewGroup.java:4902) 
                   at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1677) 
                   at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1666) 
                   at android.widget.LinearLayout.onLayout(LinearLayout.java:1442) 
                   at android.view.View.layout(View.java:15859) 
                   at android.view.ViewGroup.layout(ViewGroup.java:4902) 
                   at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1191) 
                   at android.view.View.layout(View.java:15859) 
                   at android.view.ViewGroup.layout(ViewGroup.java:4902) 
                   at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) 
                   at android.widget.FrameLayout.onLayout(FrameLayout.java:388) 
                   at android.view.View.layout(View.java:15859) 
                   at android.view.ViewGroup.layout(ViewGroup.java:4902) 
                   at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1677) 
                   at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1531) 
                   at android.widget.LinearLayout.onLayout(LinearLayout.java:1440) 
                   at android.view.View.layout(View.java:15859) 
                   at android.view.ViewGroup.layout(ViewGroup.java:4902) 
                   at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) 
                   at android.widget.FrameLayout.onLayout(FrameLayout.java:388) 
                   at android.view.View.layout(View.java:15859) 
                   at android.view.ViewGroup.layout(ViewGroup.java:4902) 
                   at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1677) 
                   at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1531) 
                   at android.widget.LinearLayout.onLayout(LinearLayout.java:1440) 
                   at android.view.View.layout(View.java:15859) 
                   at android.view.ViewGroup.layout(ViewGroup.java:4902) 
                   at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) 
                   at android.widget.FrameLayout.onLayout(FrameLayout.java:388) 
                   at android.view.View.layout(View.java:15859) 
                   at android.view.ViewGroup.layout(ViewGroup.java:4902) 
                   at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2376) 
                   at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2089) 
                   at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1264) 
                   at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6632) 
                   at android.view.Choreographer$CallbackRecord.run(Choreographer.java:813) 
                   at android.view.Choreographer.doCallbacks(Choreographer.java:613) 
                   at android.view.Choreographer.doFrame(Choreographer.java:583) 
                   at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:799) 
                   at android.os.Handler.handleCallback(Handler.java:733) 
                   at android.os.Handler.dispatchMessage(Handler.java:95) 
                   at android.os.Looper.loop(Looper.java 

GetView方法:

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    SpiceXHolder holder = null; 
    if (convertView == null) { 
     holder = new SpiceXHolder(); 
     convertView = mInflator.inflate(R.layout.list_item_spicex_result_screen, parent, false); 
     holder.profileImageIV = (RoundedImageView) convertView.findViewById(R.id.profileImageIV); 
     /*holder.imagePagerVP.setPageTransformer(true, new ZoomOutPageTransformer());*/ 
     holder.userInfoLL = (LinearLayout) convertView.findViewById(R.id.userInfoLL); 
     holder.usernameTV = (TextView) convertView.findViewById(R.id.usernameTV); 
     holder.distanceTV = (TextView) convertView.findViewById(R.id.distanceTV); 
     holder.availablityTV = (TextView) convertView.findViewById(R.id.availablityTV); 
     convertView.setTag(holder); 

    } else { 
     holder = (SpiceXHolder) convertView.getTag(); 
    } 


    prevPos = position; 
    convertView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (!mResultScreenData.get(position).getAdvert()) { 
       Fragment fragment = ((MainActivity) mContext).getSupportFragmentManager().findFragmentById(R.id.containerFL); 
       if (fragment instanceof SpicexResultListFragment) { 
        ((SpicexResultListFragment) fragment).getSpiceXDetails((String) getItem(position).getEmail(), position); 
       } 
      } 
     } 
    }); 

    if (mResultScreenData.get(position).getAdvert()) { 
     Logger.e(TAG, position + ""); 
     holder.userInfoLL.setVisibility(View.GONE); 

     RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, Utils.getInstance().dpToPx(mContext, 90)); 
     int margin = Utils.getInstance().dpToPx(mContext, 5); 
     params.setMargins(margin, margin, margin, margin); 
     holder.profileImageIV.setLayoutParams(params); 
     convertView.setLayoutParams(params); 
     holder.profileImageIV.setCornerRadius(0); 
     setImageInView(position, holder, mResultScreenData.get(position).getMedia().get(0), false); 
     Logger.e(TAG, mResultScreenData.get(position).getMedia().get(0)); 
    } else { 
     Utils.getInstance().getTimeZone(); 
     holder.profileImageIV.setCornerRadius(20); 
     holder.userInfoLL.setVisibility(View.VISIBLE); 
     RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, Utils.getInstance().dpToPx(mContext, 260)); 
     int margin = Utils.getInstance().dpToPx(mContext, 5); 
     params.setMargins(margin, margin, margin, margin); 
     holder.profileImageIV.setLayoutParams(params); 
     convertView.setLayoutParams(params); 

     holder.distanceTV.setText(mResultScreenData.get(position).getDistance()); 
     String availText = getAvailabilityText(mResultScreenData.get(position).getFree()); 
     if (availText.equals(mContext.getString(R.string.check_it_out))) { 
      holder.availablityTV.setTextColor(ContextCompat.getColor(mContext,R.color.red)); 
     } else if (availText.equals(mContext.getString(R.string.free_today))) { 
      holder.availablityTV.setTextColor(ContextCompat.getColor(mContext,R.color.green)); 
     } else if (availText.equals(mContext.getString(R.string.proposal_sent))) { 
      holder.availablityTV.setTextColor(ContextCompat.getColor(mContext,R.color.blue)); 
     } 
     holder.availablityTV.setText(availText); 
     holder.usernameTV.setText(mResultScreenData.get(position).getUserName()); 
     if (mResultScreenData.get(position).getMedia().size() > 0) 
      setImageInView(position, holder, Constants.URL_IMAGE + mResultScreenData.get(position).getMedia().get(0), true); 
    } 

    return convertView; 
} 

列表項XML佈局

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="260dp" 
    android:background="@drawable/layer_list_how_it_works" 
    android:padding="3dp"> 

    <com.spicex.utility.RoundedImageView 
     android:id="@+id/profileImageIV" 
     android:layout_width="match_parent" 
     android:layout_height="260dp" 
     android:background="@drawable/layer_list_how_it_works" 
     android:scaleType="centerCrop" /> 

    <LinearLayout 
     android:id="@+id/userInfoLL" 
     android:layout_width="match_parent" 
     android:layout_height="80dp" 
     android:layout_alignParentBottom="true" 
     android:layout_marginLeft="5dp" 
     android:layout_marginRight="5dp" 
     android:background="@drawable/layer_list_gradient_profile_corners" 
     android:orientation="vertical"> 

     <TextView 
      android:id="@+id/usernameTV" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:paddingBottom="5dp" 
      android:paddingLeft="10dp" 
      android:paddingTop="5dp" 
      android:text="@string/samantha_richards" 
      android:textAppearance="@android:style/TextAppearance.Large" 
      android:textColor="@color/white" /> 

     <LinearLayout 

      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" 
      android:weightSum="2"> 

      <LinearLayout 
       android:layout_width="0dp" 
       android:layout_height="wrap_content" 
       android:layout_marginLeft="10dp" 
       android:layout_weight="1" 
       android:orientation="horizontal"> 

       <ImageView 
        android:layout_width="20dp" 
        android:layout_height="20dp" 
        android:layout_gravity="center_vertical" 
        android:background="@drawable/ic_date_avail" /> 

       <TextView 
        android:id="@+id/availablityTV" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_gravity="center_vertical" 
        android:layout_marginLeft="10dp" 
        android:text="@string/free_now" 
        android:textAppearance="@android:style/TextAppearance.Medium" 
        android:textColor="@color/green" /> 
      </LinearLayout> 

      <RelativeLayout 
       android:layout_width="0dp" 
       android:layout_height="wrap_content" 
       android:layout_gravity="right" 
       android:layout_marginLeft="10dp" 
       android:layout_weight="1" 
       android:orientation="horizontal"> 

       <ImageView 
        android:id="@+id/distanceIV" 
        android:layout_width="20dp" 
        android:layout_height="20dp" 
        android:layout_gravity="center_vertical" 
        android:layout_marginTop="2dp" 
        android:layout_toLeftOf="@+id/distanceTV" 
        android:background="@drawable/ic_location" /> 

       <TextView 
        android:id="@+id/distanceTV" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_alignParentRight="true" 
        android:layout_gravity="center_vertical" 
        android:layout_marginLeft="10dp" 
        android:layout_marginRight="10dp" 
        android:text="@string/fourkm" 
        android:textAppearance="@android:style/TextAppearance.Medium" 
        android:textColor="@color/white" /> 
      </RelativeLayout> 


     </LinearLayout> 
    </LinearLayout> 
</RelativeLayout> 
+1

每個人都在暗示編輯代碼..請你給一個解? –

+0

編輯使您的問題更具可讀性,以實際獲得更快的解決方案。 –

+0

請檢查答案。 –

回答

0
holder.profileImageIV.setLayoutParams(params); 
convertView.setLayoutParams(params); 

如果您需要修改現有佈局參數,可以用getLayoutParams()訪問它們,進行修改,然後調用requestLayout()以通知的佈局發生了變化。

所以,與其

convertView.setLayoutParams(params); 

你可以試試這個

LayoutParams params = convertView.getLayoutParams(); 
int margin = Utils.getInstance().dpToPx(mContext, 5); 
params.setMargins(margin, margin, margin, margin); 
convertView.requestLayout(); 

做同樣的事情在ImageView

+0

java.lang.ClassCastException:android.widget.AbsListView $ LayoutParams不能轉換爲android.widget.RelativeLayout $ LayoutParams –

0

這裏您將用更通用的RelativeLayout.LayoutParams替換正確類型AbsListView.LayoutParams的現有佈局參數。

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, Utils.getInstance().dpToPx(mContext, 260)); 

檢查此零件。嘗試添加AbsListView.LayoutParams的LayoutParams。嘗試一下,讓我知道。

如果您需要修改現有佈局參數,請使用getLayoutParams()訪問它們,對其進行修改,然後致電requestLayout()通知佈局已更改。

+0

我已經在xml中使用RelativeLayout作爲父項。我也嘗試過AbsListView.LayoutParams,但它給了我異常,AbsListView.LayoutParams不能轉換爲RelativeLayout.LayoutParams –

相關問題