使用Java中的数组中的项填充ListView

时间:2014-10-22 11:06:27

标签: java android android-listview android-arrayadapter

我在listview的自定义行布局上有4个字段。我的数组中有4个字段,我想要映射到listview上的4个字段:

  1. cat_ID_PK
  2. cat_name
  3. cat_amount
  4. is_recurring
  5. 我不知道如何正确地做到这一点。这是我到目前为止所做的:

    private void loadListView(Expenses[] mExpenseArray) {
    
    //This code will write the "name" variable correctly to the logcat, so I know I'm 
    getting the right values in my array.
    
        String name = mExpenseArray[0].getCatName();
        Log.v("log_tag", name);
    
        ArrayAdapter<Expenses> adapter = new ArrayAdapter<Expenses>(getApplicationContext(), R.layout.list_row, R.id.catName, mExpenseArray);
        final ListView listView = (ListView) findViewById(R.id.list);
        listView.setAdapter(adapter);
    }
    

    此代码仅填充R.id.catName,但填充它时,它看起来像这样:mypackage@8ed455(或类似的东西)。根本没有其他字段填充,我猜测我的ArrayAdapter中的第3个参数是R.id.catName。但是,如果我拿出这个参数,我会收到这个错误:

    java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView
    

    以下是我的自定义行布局的代码:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/list_selector"
        android:orientation="horizontal"
        android:padding="5dip" >
    
    <TextView
        android:id="@+id/catName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="15dip"
        android:layout_centerVertical="true"
        android:paddingBottom ="10dip"
        android:text="@string/catName"
        android:textColor="#040404"
        android:textSize="25dip"
        android:textStyle="bold"
        android:typeface="sans" />
    
    <TextView
        android:id="@+id/catAmount"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="27dip"
        android:layout_centerVertical="true"
        android:layout_alignParentRight="true"
        android:paddingBottom ="10dip"
        android:text="$45.00"
        android:textColor="#040404"
        android:textSize="25dip"
        android:textStyle="bold"
        android:typeface="sans" />
    
    <TextView
        android:id="@+id/catType"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/catName"
        android:layout_alignLeft="@+id/catName"
        android:paddingTop="5dip"
        android:layout_centerHorizontal="true"
        android:text="@string/catType"
        android:textColor="#343434"
        android:textSize="15dip" />
    
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="catID"
        android:id="@+id/catID"
        android:layout_alignBottom="@+id/catType"
        android:layout_toRightOf="@+id/catType"
        android:layout_toEndOf="@+id/catType"
        android:layout_marginLeft="27dp"
        android:visibility="invisible" />
    </RelativeLayout>
    

    如何正确将我的4个数组字段映射到ListView?

2 个答案:

答案 0 :(得分:0)

制作这样的自定义适配器,然后将值分配给文本视图

将这样的数组传递给适配器

UserList disadpt = new UserList(HomePage.this, mEmployeeList);
    userList.setAdapter(disadpt);

然后在适配器中执行此操作..

public class UserList extends BaseAdapter
{
    private Context mContext;
    private ArrayList<Employee> items;

    public UserList(Context c, ArrayList<Employee> items) 
    {
        this.mContext = c;
        this.items = items;
    }

        public int getCount() {
        return this.items.size();
    }

    public Object getItem(int position) {
        return this.items.get(position);
    }

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

    @Override
    public View getView(int pos, View child, ViewGroup arg2) {
    Holder mHolder;
    LayoutInflater layoutInflater;
    if (child == null) {
        layoutInflater = (LayoutInflater)   mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        child = layoutInflater.inflate(R.layout.listcell, null);
        mHolder = new Holder();

        //mHolder.txt_id = (TextView) child.findViewById(R.id.txt_id);
        mHolder.txt_fName = (TextView) child.findViewById(R.id.txt_fName);
        mHolder.txt_lName = (TextView) child.findViewById(R.id.txt_lName);
        mHolder.txt_userName = (TextView) child.findViewById(R.id.txt_userName);

        child.setTag(mHolder);
    } else {
        mHolder = (Holder) child.getTag();
    }

    Employee employee = this.items.get(pos);

    ArrayList<String> employeeInfo = new ArrayList<String>();
    employeeInfo.add(employee.employeeId);
    employeeInfo.add(employee.firstName);
    employeeInfo.add(employee.lastName);

    mHolder.Details.setTag(employeeInfo);

    mHolder.txt_fName.setText(employee.firstName + " " + employee.lastName);    
    mHolder.txt_userName.setText(employee.emailId);

    return child;
}

public class Holder 
{
    //TextView txt_id;
    TextView txt_fName;
    TextView txt_lName;
    TextView txt_userName;
    Button Details;
}
}

希望这会有所帮助...

答案 1 :(得分:0)

创建数组适配器的字符串类型并使用 -

adapter.add(mExpenseArray[0].getCatName());

使用任何循环。