适配器没有显示任何东西

时间:2013-05-15 04:57:19

标签: android listview adapter

我想提出一个观点:

enter image description here

为了控制它,我在我的班级变量中制作了JSON,这是我的活动:

    public class KategoriNomorPolis extends ListActivity{

    ListView lv_epolicy;
    ArrayAdapter<String> adapter;

    List<String> list = new ArrayList<String>();
    String[][] c = new String[10][10];

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.epolicy_list_polis);

        adapter=new ArrayAdapter<String>(this,R.layout.list_item);
        kategori_epolicy();
    }

    private void kategori_epolicy(){
        String result=ListPolis.json_kategori;
        JSONArray array=null;
        try{
            array= new JSONArray(result);
            for (int i=0;i<array.length();i++){
                JSONObject object = array.getJSONObject(i);
                c[i][0] = object.getString("id_kategori");
                c[i][1] = object.getString("kategori");
//              adapter.insert(object.getString("kategori"), i);
                System.out.println("yuhuuu");
            }
            lv_epolicy=(ListView)findViewById(android.R.id.list);
            KategoriEpolicyAdapter adapter = new KategoriEpolicyAdapter(KategoriNomorPolis.this, array);
            lv_epolicy.setAdapter(adapter);
            lv_epolicy.setCacheColorHint(Color.TRANSPARENT);

        }catch (Exception e) {

        Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
        }

我不知道为什么我的适配器没有显示任何内容,我已经使用lv_epolicy=(ListView)findViewById(android.R.id.list);声明了我的列表视图,没有任何反应,这是我的KategoriEpolicyAdapter:

public class KategoriEpolicyAdapter extends BaseAdapter{
Context context;
JSONArray array;
int count;
public KategoriEpolicyAdapter(Context context, JSONArray array){
    this.context = context;
    this.array = array;
    this.count = array.length();
}

public int getCount() {
    // TODO Auto-generated method stub
    return count;
}

public Object getItem(int arg0) {
    // TODO Auto-generated method stub
    return null;
}

public long getItemId(int arg0) {
    // TODO Auto-generated method stub
    return 0;
}

public View getView(int position, View contentView, ViewGroup arg2) {
    // TODO Auto-generated method stub

    LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    contentView = inflater.inflate(R.layout.epolicy_kategori, null);

    ImageView img_epolicy = (ImageView)contentView.findViewById(R.id.img_epolicy);
    TextView text_kategori  = (TextView)contentView.findViewById(R.id.text_kategori);
    String result=ListPolis.json_kategori;
    try {
        JSONObject object = array.getJSONObject(position);
        text_kategori.setText(object.getString("kategori"));
        System.out.println("bisa ga ya? ");

        switch(position){
        case 0:
                img_epolicy.setImageResource(R.drawable.pp_icon);
            break;
        case 1:
                img_epolicy.setImageResource(R.drawable.tertanggung_icon);
            break;
        case 2:
            img_epolicy.setImageResource(R.drawable.dataasuransi_icon);
            break;
        case 3:
            img_epolicy.setImageResource(R.drawable.manfaat_icon);
            break;
        case 4:
            img_epolicy.setImageResource(R.drawable.inventaris_icon);
            break;
        case 5:
            img_epolicy.setImageResource(R.drawable.status_icon);
            break;
        case 6:
            img_epolicy.setImageResource(R.drawable.rekening_icon);
            break;

        }
    } catch (Exception e) {
        // TODO: handle exception
    }

    return contentView;
}

我希望有人可以告诉我,我的错是什么......

3 个答案:

答案 0 :(得分:1)

您正在添加json数组的数组。不要添加json数组,在列表中添加内容并添加列表代替数组。

KategoriEpolicyAdapter adapter = new KategoriEpolicyAdapter(KategoriNomorPolis.this, array);

看起来应该是这样的:

KategoriEpolicyAdapter adapter = new KategoriEpolicyAdapter(KategoriNomorPolis.this, list);

最好看看这个适配器

公共类TestListAdapter扩展了ArrayAdapter {

private LayoutInflater mInflater=null;
private HttpImageManager mHttpImageManager=null;    
private ArrayList<SeedObject> listData=null;


public TestListAdapter(Activity context,ArrayList<SeedObject> list, List<Uri> uris) {
    super(context, 0, uris);

    mInflater = context.getLayoutInflater();
    this.listData=list;

    mHttpImageManager = ((TestApplication) context.getApplication()).getHttpImageManager();
}


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

    final ViewHolder holder;

    if (convertView == null || convertView.getTag() == null) {
        holder = new ViewHolder();
        convertView = mInflater.inflate(R.layout.custom_row, null);

        holder.url = (TextView) convertView.findViewById(R.id.text_List);
        holder.city = (TextView) convertView.findViewById(R.id.text_city);
        holder.image = (ImageView) convertView.findViewById(R.id.image_List);
        convertView.setTag(holder);
    }
    else {
        holder = (ViewHolder) convertView.getTag();
    }

    final Uri uri = getItem(position);          
    ImageView imageView = holder.image;     
    if(uri != null){
        Bitmap bitmap = mHttpImageManager.loadImage(new HttpImageManager.LoadRequest(uri, imageView));          
        if (bitmap != null) {               
            // image download now compress and set on Image view
            bitmap = Bitmap.createScaledBitmap(bitmap, 60, 60, true);
            imageView.setImageBitmap(bitmap);
        }           
        else if(position %2== 0){
            imageView.setImageResource(R.drawable.greenseed_new);
        }
        else{
            imageView.setImageResource(R.drawable.grayseed_new);
        }

    }

    //set the seed name
    holder.url.setText(listData.get(position).getTitle());
    String distance =listData.get(position).getDistance();


    return convertView;
}

private static class ViewHolder {
    ImageView image;
    TextView city;
    TextView url;
}

}

答案 1 :(得分:0)

两件事。

首先,你有没有理由使用JSONArray和JSONObject?虽然我不是百分之百确定这一点,但我认为你不能用JSONArray支持你的适配器。我认为BaseAdapter只接受常规Java数组或List对象(或List的子类之一)。如果不需要,最好不要使用JSON对象。如果您确实需要使用JSONArray,请查看this link。它将向您展示如何将JSONArray解析为可在适配器中使用的Java数组。

其次,我认为覆盖getView()方法中的try / catch块可能是另一个问题。你有它捕获所有异常,但它没有输出任何东西让你知道如果抛出一个异常。因此,您的代码可能无法在被覆盖的getView()中正确执行。将System.out.println()printStackTrace()添加到catch代码块,再次运行代码,看看它是否打印出来。

答案 2 :(得分:0)

首先,通过调试检查您的数组是否为null。 然后,您可以尝试实现适配器的getItem()方法。

public Object getItem(int index) {
    return array.get(index);
}

getView()方法上,不要直接从数组中获取jsonObject。使用getItem()方法。

顺便说一下,你实现的适配器会占用太多内存。你必须小心getView方法。如果它不为空,请尝试使用contentView