ListView不显示结果,但通过代码

时间:2011-10-14 10:05:05

标签: android android-widget

我有ListView的行(listview在LinearLayout中),如

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <CheckBox
        android:id="@+id/chk"
        android:layout_alignParentLeft="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/txtChoice"
        android:textColor="#FF0000"
        android:text="TEST"
        android:layout_toRightOf="@id/chk"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" /> 
</RelativeLayout>

和类似内部类的适配器

private class SimpleAdapter extends BaseAdapter {

    private String[] list=null;

    public SimpleAdapter(String[] list) {
      this.list = list;
    }

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

    @Override
    public Object getItem(int position) {
      return list[position];
    }

    @Override
    public long getItemId(int position) {
      return list[position].hashCode();
    }

    // Generate view for coupon's row 
    public View getView(int position, View convertView, ViewGroup parent) {

      View view = convertView;

      if(view == null){
        LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.row, null);
      }    

      return view;
    } 
  } 

我设置适配器

        SimpleAdapter m=new SimpleAdapter( data );
            listView.setAdapter(m);

数据为String[] data=new String[]{"test","test_1"}; 但是列表没有显示任何内容。我贬低了,它通过了正常但没有任何表现。可能有什么问题?

4 个答案:

答案 0 :(得分:3)

您发布的相同代码,我已经尝试过了。 并且完美地运行..

我在我的activity和xml中使用了相同的适配器类

在我的TestThis.java文件中

我使用了你的Adapter类 我写了,

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

        String[] data=new String[]{"test","test_1"};
        SimpleAdapter m=new SimpleAdapter( data );
        ListView listView = new ListView(this);
        listView.setAdapter(m); 
        setContentView(listView);
    }

但仍然需要在getView()方法中将String数组中的数据设置为文本视图

他把结果作为列表给了我2行。

this

答案 1 :(得分:2)

我认为你的getView()需要一些工作。你并没有真正对你传入的数据做任何事情。试试这个:

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

    View v;
    if (convertView == null)
        v = LayoutInflater.from(context).inflate(R.layout.row, parent, false);
    else
        v = convertView;

    TextView text = (TextView) v.findViewById(R.id.txChoice);
    text.setText( list[position] );     

    return v;

}

答案 2 :(得分:1)

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

  View view = convertView;

  if(view == null){
    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    view = inflater.inflate(R.layout.row, null);
  }    

  return view;
} 

使用以下命令修改你的getView:

  if(convertView == null){
    LayoutInflater inflater (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    convertView = inflater.inflate(R.layout.row, null);
  }   TextView t = (TextView) convertView.findViewById(your text view); t.setText(...); return convertView;

这里为你没有设置行内容的行充气..使用convertiview来检索你的文本视图,使用作为参数传递给getView方法的位置调用getItem,并设置你的文本。

答案 3 :(得分:1)

你也可以试试这个:

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

          ViewHolder holder;

          if(view == null)
          {
                   LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                   convertView = mInflater.inflate(R.layout.row, null);
                   holder = new ViewHolder();

                   holder.txtChoice=(TextView)convertView.findViewById(R.id.txtChoice);                 

          }
          else
                   holder=(ViewHolder)convertView.getTag();     

          holder.textChoice.setText(lis[position]));    

          return view;
        }

        static class ViewHolder
        {       
            TextView txtChoice;        
        }