2 mr qifei Mr_qifei 于 2016.02.28 15:58 提问

Android 里面自己定义的Adapter运行崩溃

class MyAdapter extends ArrayAdapter {

    public MyAdapter(Context context, int resource) {
        super(context, resource);
    }

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

** @Override

public int getCount() {

return imgs.length;

}**

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {


        View view=null;
        if(convertView==null){
            LayoutInflater inflater= (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
            inflater.inflate(R.layout.item,null);
        }else {
            view=convertView;
        }
        ImageView iv=(ImageView)view.findViewById(R.id.imageView);
        TextView tv= (TextView) view.findViewById(R.id.textView);
        iv.setImageResource(imgs[position]);
        tv.setText(names[position]);
        return view;
    }
}
    运行到加黑的getCount的时候程序就会崩溃,编程小白,望指教

7个回答

tianyaleixiaowu
tianyaleixiaowu   2016.03.02 16:43
已采纳
luochoudan
luochoudan   Ds   Rxr 2016.02.28 22:07

你敲的肯定跟人家的不一样。试一下这个,性能不太好,网上这种例子很多,多百度百度。
public View getView(int position ,View convertView,ViewGroup parent){
LayoutInflater inflater= (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
view=inflater.inflate(R.layout.item,null);
ImageView iv=(ImageView)view.findViewById(R.id.imageView);
TextView tv= (TextView) view.findViewById(R.id.textView);
iv.setImageResource(imgs[position]);
tv.setText(names[position]);
return view;
}

dongfeng9ge
dongfeng9ge   Ds   Rxr 2016.02.29 08:25

你的convertView没有初始化

u012131702
u012131702   2016.02.28 16:10

当然啦,convertView都没有初始化……………… inflater时

Mr_qifei
Mr_qifei   2016.02.28 21:00

你说的是view=inflater.inflate(R.layout.item,null);吗。。。确实没注意到这个,谢谢啦。。可是改了之后程序还是崩溃。。。。困扰我几天了。。。。

package com.example.mrzhou.gridviewprogress;

import android.content.Context;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

public int[] imgs={R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,
        R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher};
public String[] names={"a","b","c","d","e","f","g"};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    GridView gv= (GridView) this.findViewById(R.id.gridView);
    MyAdapter adapter=new MyAdapter(this,0);
    gv.setAdapter(adapter);


    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).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);
}

class MyAdapter extends ArrayAdapter {

    public MyAdapter(Context context, int resource) {
        super(context, resource);
    }

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

    @Override
    public int getCount() {
        return imgs.length;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {


        View view=null;
        if(convertView==null){
            LayoutInflater inflater= (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
            view=inflater.inflate(R.layout.item,null);
        }else {
            view=convertView;
        }
        ImageView iv=(ImageView)view.findViewById(R.id.imageView);
        TextView tv= (TextView) view.findViewById(R.id.textView);
        iv.setImageResource(imgs[position]);
        tv.setText(names[position]);
        return view;
    }
}

}
这是整个mainactivity,我是在看视频学习,和他教的一样来的,可就是出错。。。望指教。。万分感谢

Mr_qifei
Mr_qifei 你说的是view=inflater.inflate(R.layout.item,null);吗。。。确实没注意到这个,谢谢啦。。可是改了之后程序还是崩溃。。。。困扰我几天了。。。。下面的是我的全部代码。。麻烦你了
2 年多之前 回复
Mr_qifei
Mr_qifei   2016.02.28 21:00

你说的是view=inflater.inflate(R.layout.item,null);吗。。。确实没注意到这个,谢谢啦。。可是改了之后程序还是崩溃。。。。困扰我几天了。。。。

package com.example.mrzhou.gridviewprogress;

import android.content.Context;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

public int[] imgs={R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,
        R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher};
public String[] names={"a","b","c","d","e","f","g"};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    GridView gv= (GridView) this.findViewById(R.id.gridView);
    MyAdapter adapter=new MyAdapter(this,0);
    gv.setAdapter(adapter);


    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).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);
}

class MyAdapter extends ArrayAdapter {

    public MyAdapter(Context context, int resource) {
        super(context, resource);
    }

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

    @Override
    public int getCount() {
        return imgs.length;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {


        View view=null;
        if(convertView==null){
            LayoutInflater inflater= (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
            view=inflater.inflate(R.layout.item,null);
        }else {
            view=convertView;
        }
        ImageView iv=(ImageView)view.findViewById(R.id.imageView);
        TextView tv= (TextView) view.findViewById(R.id.textView);
        iv.setImageResource(imgs[position]);
        tv.setText(names[position]);
        return view;
    }
}

}
这是整个mainactivity,我是在看视频学习,和他教的一样来的,可就是出错。。。望指教。。万分感谢

qq_27578023
qq_27578023   2016.06.08 22:44
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Android adapter.notifyDataSetChanged 后程序崩溃,求解!
从网上找到一个仿微信聊天的例子。加载完列表后,点击发送后可以将当前输入的显示在列表上。我在自己的测试代码里把Adapter 改了一点:就是把LIST里的对象换了一下。然后在点击发送后。adapter.notifyDataSetChanged 代码执行无异常。但程序随后就会提示。isn't responding do you want to close? 求大侠给指点一下! 原例Adapter
Android Adapter中使用Holder 需要注意的地方
在使用GridView、ListView时,通常会在Adapter中采用Holder缓存每一项以提高效率,但如果没有用好Holder,这个缓存机制会导致许多意想不到的问题,结合自己的经验特地总结一下,以免今后再犯。 内容错乱 在Adapter的getView方法中通过position更新每一项的内容,对于根据判断条件给每一项设置属性的情况,每个判断条件下都需要给每一项的每个属性赋值,否
Android中调用listview 控件的 listview.setAdapter(adapter)程序闪退、崩溃
private ListView listview ; listview = (ListView)this.findViewById(R.id.listview);  List> list=new ArrayList>(); HashMap map1=new HashMap(); HashMap map2 = new HashMap(); map1.put("user_name","
当在listview或者viewpager使用adapter填充图片时,使用glide报错问题(tag问题)
当在listview或者viewpager使用adapter填充图片时,使用glide报错问题 为题如下涉及tag问题的报错原代码ImageView iv = new ImageView(mContext); Glide.with(UIUtils.getContext()) .load(DataUrl.imageUrl + topData.get(position))
activity中怎么控制listview adapter中生成的对话框
在我的主Actiity中有一个listView,使用自定义的adapter,在adapter的getView方法中,设置了点击某个按钮,生成一个对话框dialog,但我在activity中要关闭这个对话框,要怎么能够找到它呢?
在Activity中响应ListView内部按钮的点击事件
通过接口回调的方式,在Activity中响应ListView内部按钮的点击事件。
Android 使用BaseAdapter实现异步图片加载
BaseAdapter就Android应用程序中经常用到的基础数据适配器,它的主要用途是将一组数据传到像ListView、Spinner、Gallery及GridView等UI显示组件,它是继承自接口类Adapter, 1、Adapter类简介 1)、Adapter相关类结构如下图所示: 自定义Adapter子类,就需要实现上面几个方法,其中最重要的是getView()方
自定义Adapter将图片在GridView中显示
首先来看一下效果图: 这是使用真机调试的效果图,下面来看如何实现。 第一步:在activity_main.xml中写入GridView,如下: 第二步:在ActivityMain.java中写如下代码: 其中gridView是刚刚我们在xml中的空间,可通过gridView=(GridView) this.findViewById(R.id.gridview);获得。 M
关于在Activity中用了setAdapter后程序崩溃,求大神解答
以下是activity中的代码:红色部分注销可正常运行,为了实现在购物车界面加载数据库并布局到listview中。 import static com.example.asus.myapp.R.layout.gouwuche; /**  * Created by ASUS on 2016/12/5.  */ public class GouwuchePage extends 
自定义Adapter与系统自带的adapter区别(样例步骤).txt
item.list.xml(自定义item布局样式)<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android: