Mylistview导致FAILED BINDER TRANSACTION

时间:2016-12-23 07:36:47

标签: java android

我正在制作包含文字和图片的ListView。一切都还可以,但当我点击其中一个列表项时,应用程序终止并显示以下内容:

  

E / JavaBinder:!!!失败的粘合剂交易! E / AndroidRuntime:   错误报告崩溃                     android.os.TransactionTooLargeException                         在android.os.BinderProxy.transactNative(原生方法)                         在android.os.BinderProxy.transact(Binder.java:496)                         在android.app.ActivityManagerProxy.handleApplicationCrash(ActivityManagerNative.java:4716)                         at com.android.internal.os.RuntimeInit $ UncaughtHandler.uncaughtException(RuntimeInit.java:95)                         at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)                         在java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)

以下是代码:

public class RowItem {

    private String title ;
    private String descreption;
    private int pic_id;


    public RowItem(String title, String descreption, int pic_id) {
            this.title = title;
            this.descreption = descreption;
            this.pic_id = pic_id;
        }

    public String getTitle() {
            return title;
    }

    public void setTitle(String title) {
            this.title = title;
    }

    public String getDescreption() {
            return descreption;
    }

    public void setDescreption(String descreption) {
            this.descreption = descreption;
    }

    public int getPic_id() {
            return pic_id;
    }

    public void setPic_id(int pic_id) {
            this.pic_id = pic_id;
        }
    }

public class CustomAdapter extends BaseAdapter{
    Context context;
    List<RowItem> rowItems;

    public CustomAdapter(Context context, List<RowItem> rowItems) {

        this.context = context;
        this.rowItems = rowItems;
    }

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

    @Override
    public Object getItem(int position) {
        return rowItems.get(position);
    }

    @Override
    public long getItemId(int position) {
        return rowItems.indexOf(getItemId(position));
}

private class ViewHolder{
    ImageView imageView ;
    TextView Title;
    TextView descrip;
}

@Override
public View getView(  int position, View convertView, ViewGroup parent) {
    ViewHolder holder ;
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

        if (convertView==null){
            convertView = inflater.inflate(R.layout.list_item,null);
            holder=new ViewHolder();
            holder.Title= (TextView)convertView.findViewById(R.id.title);
            holder.imageView=(ImageView)convertView.findViewById(R.id.pic1);
            holder.descrip=(TextView)convertView.findViewById(R.id.descrption);

            convertView.setTag(holder);
        }
        else {
            holder = (ViewHolder) convertView.getTag();}
            RowItem row_po = rowItems.get(position);
            holder.imageView.setImageResource(row_po.getPic_id());
            holder.Title.setText(row_po.getTitle());
            holder.descrip.setText(row_po.getDescreption());
            return convertView;
        }
}

public class ExploreActivity extends Activity {
    String[] Title;
    TypedArray pics;
    String[] description;
    List<RowItem> rowItems;
    ListView mylistview;

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

        mylistview = (ListView) findViewById(R.id.list);
        CustomAdapter adapter = new CustomAdapter(this, rowItems);
        mylistview.setAdapter(adapter);
        rgistercalback();
    }

    private void poplatelistview() {
        rowItems = new ArrayList<RowItem>();
        Title = getResources().getStringArray(R.array.Title);
        pics = getResources().obtainTypedArray(R.array.pics);
        description = getResources().getStringArray(R.array.Descrpsions);
        for (int i = 0; i < Title.length; i++) {
            RowItem item = new RowItem(Title[i], description[i], pics.getResourceId(i, -1));
            rowItems.add(item);
        }
    }

    private void rgistercalback() {
        ListView list = (ListView) findViewById(R.id.list);
        list.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String title = rowItems.get(position).getTitle();
                Toast.makeText(getApplicationContext(),""+title,Toast.LENGTH_LONG).show();
            }
        });
    }
}

1 个答案:

答案 0 :(得分:0)

请在您的自定义适配器类

中尝试此操作
  @Override
public int getCount() {
    return rowItems.size();
}

@Override
public RowItem getItem(int position) {
    return rowItems.get(position);
}

@Override
public long getItemId(int i) {
    return 0;
}

希望它能奏效。

相关问题