滚动

时间:2016-02-26 15:39:18

标签: java android xml listview

我正在学习本教程:

http://www.androidinterview.com/android-custom-listview-with-image-and-text-using-arrayadapter/

我需要一个简单的硬编码列表视图,其中包含一些文本和图像。一切都很好,但当我向下滚动应用程序崩溃。

这是MainActivity类

public class MainActivity extends AppCompatActivity {

    ListView list;
    String[] itemdate ={
            "21/02",
//there are more dates like this in here

    };

    String[] itemname ={
            "Snapchat",
//there are more strings like this in here
    };

    Integer[] imgid={
            R.drawable.pic1,
//there are more pictures like this in here
    };


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

        CustomListAdapter adapter=new CustomListAdapter(this, itemdate, itemname, imgid);
        list=(ListView)findViewById(R.id.list);
        list.setAdapter(adapter);

        list.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                // TODO Auto-generated method stub
                String Slecteditem = itemname[+position];
                Toast.makeText(getApplicationContext(), Slecteditem, Toast.LENGTH_SHORT).show();

            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

这是我的customlistadapter类。

public class CustomListAdapter extends ArrayAdapter<String> {

    private final Activity context;
    private final String[] itemdate;
    private final String[] itemname;
    private final Integer[] imgid;

    public CustomListAdapter(Activity context, String[] itemdate, String[] itemname, Integer[] imgid) {
        super(context, R.layout.mylist, itemname);
        // TODO Auto-generated constructor stub

        this.context=context;
        this.itemdate=itemdate;
        this.itemname=itemname;
        this.imgid=imgid;
    }

    public View getView(int position,View view,ViewGroup parent) {
        LayoutInflater inflater=context.getLayoutInflater();
        View rowView=inflater.inflate(R.layout.mylist, null,true);

        TextView txtTitle = (TextView) rowView.findViewById(R.id.item);
        ImageView imageView = (ImageView) rowView.findViewById(R.id.icon);
        TextView extratxt = (TextView) rowView.findViewById(R.id.textView1);

        txtTitle.setText(itemdate[position]);
        imageView.setImageResource(imgid[position]);
        extratxt.setText(itemname[position]);
        return rowView;

    };
}

这是崩溃的logcat

 at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
            at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
            at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:609)
            at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444)
            at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1080)
            at android.content.res.Resources.loadDrawableForCookie(Resources.java:2635)
            at android.content.res.Resources.loadDrawable(Resources.java:2540)
            at android.content.res.Resources.getDrawable(Resources.java:806)
            at android.content.Context.getDrawable(Context.java:458)
            at android.widget.ImageView.resolveUri(ImageView.java:811)
            at android.widget.ImageView.setImageResource(ImageView.java:418)
            at com.peeters.ward.app.CustomListAdapter.getView(CustomListAdapter.java:37)
            at android.widget.AbsListView.obtainView(AbsListView.java:2346)
            at android.widget.ListView.makeAndAddView(ListView.java:1875)
            at android.widget.ListView.fillDown(ListView.java:702)
            at android.widget.ListView.fillGap(ListView.java:666)
            at android.widget.AbsListView.trackMotionScroll(AbsListView.java:5029)
            at android.widget.AbsListView.scrollIfNeeded(AbsListView.java:3424)
            at android.widget.AbsListView.startScrollIfNeeded(AbsListView.java:3352)
            at android.widget.AbsListView.onTouchMove(AbsListView.java:3793)
            at android.widget.AbsListView.onTouchEvent(AbsListView.java:3651)
            at android.view.View.dispatchTouchEvent(View.java:9294)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2547)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2240)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
            at com.android.internal.policy.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2403)
            at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1737)
            at android.app.Activity.dispatchTouchEvent(Activity.java:2765)
            at android.support.v7.internal.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60)
            at com.android.internal.policy.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2364)
            at android.view.View.dispatchPointerEvent(View.java:9514)
            at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4230)
            at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4096)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661)
            at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3787)
            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3669)
            at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3844)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661)
            at android.view.ViewRootImpl$InputStage.app
02-26 15:49:03.645    2166-2166/com.peeters.ward.app D/AndroidRuntime﹕ Shutting down VM
02-26 15:49:03.645    2166-2166/com.peeters.ward.app E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.peeters.ward.app, PID: 2166
    java.lang.OutOfMemoryError: Failed to allocate a 144000012 byte allocation with 1290600 free bytes and 1260KB until OOM
            at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
            at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
            at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:609)
            at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444)
            at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1080)
            at android.content.res.Resources.loadDrawableForCookie(Resources.java:2635)
            at android.content.res.Resources.loadDrawable(Resources.java:2540)
            at android.content.res.Resources.getDrawable(Resources.java:806)
            at android.content.Context.getDrawable(Context.java:458)
            at android.widget.ImageView.resolveUri(ImageView.java:811)
            at android.widget.ImageView.setImageResource(ImageView.java:418)
            at com.peeters.ward.app.CustomListAdapter.getView(CustomListAdapter.java:37)
            at android.widget.AbsListView.obtainView(AbsListView.java:2346)
            at android.widget.ListView.makeAndAddView(ListView.java:1875)
            at android.widget.ListView.fillDown(ListView.java:702)
            at android.widget.ListView.fillGap(ListView.java:666)
            at android.widget.AbsListView.trackMotionScroll(AbsListView.java:5029)
            at android.widget.AbsListView.scrollIfNeeded(AbsListView.java:3424)
            at android.widget.AbsListView.startScrollIfNeeded(AbsListView.java:3352)
            at android.widget.AbsListView.onTouchMove(AbsListView.java:3793)
            at android.widget.AbsListView.onTouchEvent(AbsListView.java:3651)
            at android.view.View.dispatchTouchEvent(View.java:9294)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2547)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2240)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
            at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
            at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
            at com.android.internal.policy.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2403)
            at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1737)
            at android.app.Activity.dispatchTouchEvent(Activity.java:2765)
            at android.support.v7.internal.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60)
            at com.android.internal.policy.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2364)
            at android.view.View.dispatchPointerEvent(View.java:9514)
            at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4230)
            at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4096)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695)
            at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661)
            at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3787)
            at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3669)
            at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3844)
            at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642)
            at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695)
            at android.view.ViewRootImpl$InputStage.f
02-26 15:49:05.192    2166-2174/com.peeters.ward.app W/art﹕ Suspending all threads took: 6.159ms
02-26 15:49:05.896    2166-2166/com.peeters.ward.app I/Process﹕ Sending signal. PID: 2166 SIG: 9

2 个答案:

答案 0 :(得分:1)

这是由于outofmemory错误使用piccaso以这种方式加载图像

Picasso.with(mContext).load(imgid[position]).error(R.drawable.add_photo).into(myImgView);

获取lib http://square.github.io/picasso/

尝试启用大堆支持,方法是将其添加到AndroidManifest.xml文件中:

<application android:largeHeap="true"

答案 1 :(得分:0)

很可能itemdate数组,imgid数组和itemname数组的长度不一样。其中一个比其他小或大于。否则一切都没问题