应用程序在kitkat上崩溃,但在棒棒糖上没有



我在应用程序中使用一个简单的列表视图。在我的adpader中,我正在调整元素的大小。当我在Nexus5(棒棒糖)上运行它时,它运行得很好,但在Moto E(Kitkat)上崩溃了。

我的适配器是

      package com.hj.app.adapters;
 import java.io.IOException;
 import java.util.ArrayList;
 import android.content.Context;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.view.ViewGroup;
 import android.widget.BaseAdapter;
 import android.widget.LinearLayout.LayoutParams;
 import com.hj.app.R;
 import com.hj.app.holders.HJFeedItemViewHolder;
 import com.hj.app.objects.HJFeedItemObject;

public class FeedListViewAdapter extends BaseAdapter {
public ArrayList<HJFeedItemObject> objects;
Context mContext;
public FeedListViewAdapter(Context context) {
    this.mContext = context;
    this.objects = new ArrayList<HJFeedItemObject>();
}
@Override
public int getCount() {
    return objects == null ? 0 : objects.size();
}
@Override
public Object getItem(int position) {
    return objects.get(position);
}
@Override
public long getItemId(int position) {
    return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        convertView = ((LayoutInflater) mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE))
                .inflate(R.layout.hj_feed_recycle_item_layout, null);
        HJFeedItemViewHolder holder = new HJFeedItemViewHolder(convertView);
        convertView.setTag(holder);
    }
    HJFeedItemViewHolder holder = (HJFeedItemViewHolder) convertView
            .getTag();
    holder.feedTitle.setText(objects.get(position).getFeedTitle());
    holder.feedPostTime.setText(objects.get(position).getFeedGenTime());
    holder.sourceUserName.setText(objects.get(position).getFeedSourceObj()
            .getUserName());
    holder.sourceImage.setImageResource(R.drawable.ic_launcher);
    try {
        Bitmap bitmap;
        if (position % 3 == 0) {
            bitmap = BitmapFactory.decodeStream(mContext.getAssets().open(
                    "houzz1.jpg"));
        } else if (position % 3 == 1) {
            bitmap = BitmapFactory.decodeStream(mContext.getAssets().open(
                    "houzz2.jpg"));
        } else {
            bitmap = BitmapFactory.decodeStream(mContext.getAssets().open(
                    "houzz3.png"));
        }
        LayoutParams lp;
        if (bitmap.getHeight() < 900) {
            lp = new LayoutParams(LayoutParams.MATCH_PARENT, 900);
        } else {
            lp = new LayoutParams(LayoutParams.MATCH_PARENT,
                    bitmap.getHeight());
        }
        holder.feedPicFrame.setLayoutParams(lp);
        holder.feedPic.setImageBitmap(bitmap);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    LayoutParams lp1 = new LayoutParams(LayoutParams.MATCH_PARENT,
            LayoutParams.MATCH_PARENT);
    lp1.bottomMargin = (int) mContext.getResources().getDimension(
            R.dimen.hj_margin_large);
    if (position == 0) {
        lp1.topMargin = (int) mContext.getResources().getDimension(
                R.dimen.hj_margin_large);
    }
    holder.feedParent.setLayoutParams(lp1);
    if (objects.get(position).isFeedFav()) {
        holder.favorite.setSelected(true);
    } else {
        holder.favorite.setSelected(false);
    }
    holder.favorite.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            if (v.isSelected()) {
                v.setSelected(false);
                objects.get(position).setFeedFav(false);
            } else {
                v.setSelected(true);
                objects.get(position).setFeedFav(true);
            }
        }
    });
    return convertView;
}
/**
 * @param itemObjs
 */
public void addData(ArrayList<HJFeedItemObject> itemObjs) {
    objects.addAll(itemObjs);
}

}

我得到以下错误

  java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams

请帮助

检查

    android:minSdkVersion="##"
    android:targetSdkVersion="##"

清单

对于kitkat,SDK版本为21

而不是导入android.widget.LinearLayout.LayoutParams;将import更改为=>importandroid.view.ViewGroup.LayoutParams;

无论你在哪里设置布局参数都是这样的:

ViewGroup.LayoutParams lp1 = new ViewGroup.LayoutParams
(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);

使用以下链接可以正确使用视图固定器图案http://ricston.com/blog/optimising-listview-viewholder-pattern/http://www.javacodegeeks.com/2013/09/android-viewholder-pattern-example.html

最新更新