列表未在android中显示

时间:2015-09-15 11:06:38

标签: android list listview

我通过以下代码填充列表。

public void refreshSmsInbox() {
        ContentResolver contentResolver = getContentResolver();
        Cursor smsInboxCursor = contentResolver.query(
                Uri.parse("content://sms/inbox"), null, null, null, null);
        int indexBody = smsInboxCursor.getColumnIndex("body");
        int indexAddress = smsInboxCursor.getColumnIndex("address");
        if (indexBody < 0 || !smsInboxCursor.moveToFirst())
            return;
        arrayAdapter.clear();
        List<String> smsBody = new ArrayList<String>();
        String fromNumber = "";
        do {
            if (pre_address.equals(smsInboxCursor.getString(indexAddress))) {
                String str = "SMS From: "
                        + smsInboxCursor.getString(indexAddress) + "\n"
                        + smsInboxCursor.getString(indexBody) + "\n";
                fromNumber = smsInboxCursor.getString(indexAddress);
                smsBody.add(smsInboxCursor.getString(indexBody));
            //  arrayAdapter.add(str);
            }
        } while (smsInboxCursor.moveToNext());
          arrayAdapter = new SmsArrayAdapter(this,R.layout.row_item,smsBody,fromNumber);
          smsListView.setAdapter(arrayAdapter);
    }

SmsArrayAdapter的代码如下:

public class SmsArrayAdapter extends ArrayAdapter<String> {

    List<String> smsBody;
    List<Boolean> Status;
    Context context;
    private static LayoutInflater inflater = null;
    String fromNumber ; 

    public SmsArrayAdapter(Context context, int resource, List<String> smsBody,
             String fromNumber) {
        super(context, resource);
        this.smsBody = smsBody;
    //  this.Status = Status;
        this.context = context;
        inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        this.fromNumber = fromNumber;
    }

     public static class ViewHolder{

         public TextView textfrom;
         public TextView text_sms; 

     }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        super.getView(position, convertView, parent);

        View view = convertView;
        ViewHolder holder;

        if (convertView == null) {

            /****** Inflate tabitem.xml file for each row ( Defined below ) *******/
            view = inflater.inflate(R.layout.row_item, null);

            /****** View Holder Object to contain tabitem.xml file elements ******/

            holder = new ViewHolder();
            holder.textfrom = (TextView) view.findViewById(R.id.textView_from);
            holder.textfrom.setText(" SMS FROM "+fromNumber);
            holder.text_sms = (TextView) view.findViewById(R.id.textView_sms);
            holder.text_sms.setText(smsBody.get(position));


            /************ Set holder with LayoutInflater ************/
            view.setTag(holder);
        } else
            holder = (ViewHolder) view.getTag();

        return view;
    }

}

但是列表没有显示。为什么?错误在哪里?我怎么解决这个问题?

2 个答案:

答案 0 :(得分:1)

在SmsArrayAdapter构造函数中删除此

 super(context, resource);

添加此

 super(context, resource,smsBody);

ArrayAdapter超类使用它。否则列表始终为空。在你使用它之前,它不会调用你的getView。

public class SmsArrayAdapter extends ArrayAdapter<String> {


    List<String> smsBody;
    List<Boolean> Status;
    Context context;
    private LayoutInflater inflater = null;
    String fromNumber ; 

    public SmsArrayAdapter(Context context, int resource, List<String> smsBody,
             String fromNumber) {
        super(context, resource,smsBody);
        this.smsBody = smsBody;
    //  this.Status = Status;
        this.context = context;
        inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        this.fromNumber = fromNumber;               
    }  

     public class ViewHolder{

         public TextView textfrom;
         public TextView text_sms; 

     }

    @Override
    public View getView(int position, View view, ViewGroup parent) {
        // TODO Auto-generated method stub


        ViewHolder holder;

        if (view == null) {

            /****** Inflate tabitem.xml file for each row ( Defined below ) *******/
            view = inflater.inflate(R.layout.row_item, null);

            /****** View Holder Object to contain tabitem.xml file elements ******/

            holder = new ViewHolder();
            holder.textfrom = (TextView) view.findViewById(R.id.textView_from);

            holder.text_sms = (TextView) view.findViewById(R.id.textView_sms);              


            /************ Set holder with LayoutInflater ************/
            view.setTag(holder);
        } else
            holder = (ViewHolder) view.getTag();
        holder.textfrom.setText(" SMS FROM "+fromNumber);
        holder.text_sms.setText(smsBody.get(position));
        return view;
    }

}

答案 1 :(得分:0)

我在经过一些修改后实现了您的代码,现在显示了列表,下面是代码

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    super.getView(position, convertView, parent);


    ViewHolder holder;

    if (convertView == null) {

        /****** Inflate tabitem.xml file for each row ( Defined below ) *******/
        convertView = inflater.inflate(R.layout.row_item, null);

        /****** View Holder Object to contain tabitem.xml file elements ******/

        holder = new ViewHolder();
        holder.textfrom = (TextView) convertView .findViewById(R.id.textView_from);
        holder.textfrom.setText(" SMS FROM "+fromNumber);
        holder.text_sms = (TextView) convertView .findViewById(R.id.textView_sms);
        holder.text_sms.setText(smsBody.get(position));


        /************ Set holder with LayoutInflater ************/
        convertView .setTag(holder);
    } else
        holder = (ViewHolder) convertView .getTag();

    return convertView ;
}