【问题标题】:Android ListView custom adapter basics: getView() position always 0Android ListView 自定义适配器基础知识:getView() 位置始终为 0
【发布时间】:2015-01-15 22:16:34
【问题描述】:

GetView位置始终为0。按照http://www.codelearn.org/android-tutorial/android-listview所示的基本概念,我的代码如下:

public void DisplayUserList()
{   // Get data list from SQL Database
    UserList = mySQLiteHelper.getUserList(ACTIVE);

    // Get ListView
    user_listview_control = (ListView) findViewById(R.id.user_listview);

    // Get Adapter
    userAdapter = new UserAdapter();

    // Bind it all together
    user_listview_control.setAdapter(userAdapter);

}   // end DisplayUserList()

// User List Base Adapter
public class UserAdapter extends BaseAdapter {

    @Override
    public int getCount() {

        return UserList.size();
    }

    @Override
    public Structures.user_struct getItem(int arg0){
        return UserList.get(arg0);
    }

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

    @Override
    public View getView(int position, View arg1, ViewGroup arg2){
        if (arg1 == null){
            LayoutInflater inflater = (LayoutInflater) Settings.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            try {
                arg1 = inflater.inflate(R.layout.userlist_item, arg2, false);
            }
            catch (Exception ex){
                String errorMessage = ex.getMessage();
            }
        }

        TextView username = (TextView)arg1.findViewById(R.id.username);
        TextView firstname = (TextView)arg1.findViewById(R.id.userfirstname);
        TextView lastname = (TextView)arg1.findViewById(R.id.userlastname);
        TextView lastlogin = (TextView)arg1.findViewById(R.id.userlastlogin);

        UserData = UserList.get(position);   //(always zero)

        username.setText(user.username);
        firstname.setText(user.user_firstname);
        lastname.setText(user.user_lastname);

        if (user.user_lastlogin_date.length() == 0) {
            lastlogin.setText("--");
        } else {
            lastlogin.setText(user.user_lastlogin_date);
        }

        // OnClickListener for this row.
        arg1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(Settings.this, "User Clicked", Toast.LENGTH_SHORT).show();
                //Integer position = (Integer) view.getTag();
            }
        });

        return arg1;
    }
}   // end UserAdapter()

sqlite 数据表有三项在 UserList 中返回,定义为:

public List<Structures.user_struct> UserList;

当调用 user_listview_control.setAdapter 时,在调用 getView() 之前重复调用 getCount()(返回值 3)。在 getView() 中,位置始终为 0。生成的 ListView 显示为一行,仅显示数据库的第一项。 [注意:如果我强制位置 = 1 或 2,代码将返回该列表中的下一个用户]。我不知道我在哪里。会不会是限制显示的xml布局?当我运行上面引用的示例代码时,它确实作为一个简单的 xml 布局工作。所以???

【问题讨论】:

  • 发布您的布局文件userlist_item.xml
  • 你能发布 mySQLiteHelper.getUserList(ACTIVE);方法?
  • 你能发布你的“user_listview”xml吗?

标签: android listview baseadapter


【解决方案1】:

获取用户列表:

public List<Structures.user_struct> getUserList(int isActive) {
    // Get List of Users in database
    //  Filter isActive 0 = Not, 1 = Is, 2 = ALL
    //  NOte: Is userList database does not exist, create it.

    Structures.user_struct UserData = new Structures.user_struct();
    List<Structures.user_struct> UserList = new     ArrayList<Structures.user_struct>();

    SQLiteDatabase db = this.getReadableDatabase();
    String strSQL = "select * from " + Structures.USER_TABLE_NAME ;
    if (isActive < 2){      // filter is or is not active Only
        strSQL += " where " + Structures.USER_COL_IS_ACTIVE + "=" + isActive;
    }

    Cursor cursor = db.rawQuery(strSQL, null);
    cursor.moveToFirst();
    while (cursor.isAfterLast() == false) {

        UserData.user_id = cursor.getInt(cursor.getColumnIndex(Structures.USER_COL_ID));
        UserData.user_is_active = cursor.getInt(cursor.getColumnIndex(Structures.USER_COL_IS_ACTIVE));
        UserData.username = cursor.getString(cursor.getColumnIndex(Structures.USER_COL_USERNAME));
        UserData.user_password = cursor.getString(cursor.getColumnIndex(Structures.USER_COL_PASSWORD));
        UserData.user_firstname = cursor.getString(cursor.getColumnIndex(Structures.USER_COL_FIRSTNAME));
        UserData.user_lastname = cursor.getString(cursor.getColumnIndex(Structures.USER_COL_LASTNAME));
        UserData.user_date_created = cursor.getString(cursor.getColumnIndex(Structures.USER_COL_DATECREATED));
        UserData.user_date_updated = cursor.getString(cursor.getColumnIndex(Structures.USER_COL_DATEUPDATED));
        UserData.user_lastlogin_date = cursor.getString(cursor.getColumnIndex(Structures.USER_COL_DATELASTLOGIN));

        // Copy UserData to ArrayList of structures
        UserList.add(UserData);

        cursor.moveToNext();

        UserData = new Structures.user_struct();
    }

    return UserList;
}   // end getUserList()

用户数据

 // User Data Structure
 public static class user_struct {
    public int user_id;
    public int user_is_active;      // 0=not, 1=is
    public String username;
    public String user_password;
    public String user_firstname;
    public String user_lastname;
    public int user_permission_level_id;
    public String user_date_created;
    public String user_date_updated;
    public String user_lastlogin_date;
}   // end user_structure()

userlist_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <TextView android:id="@+id/username"
        android:layout_width="@dimen/user_list_width"
        android:layout_height="wrap_content"
        style="@style/User_List"
        android:text="username"/>

    <Space
        android:layout_width="5dp"
        android:layout_height="wrap_content" />

    <TextView android:id="@+id/userfirstname"
        android:layout_width="@dimen/user_list_width"
        android:layout_height="wrap_content"
        style="@style/User_List"
        android:text="first name"/>

    <Space
        android:layout_width="5dp"
        android:layout_height="wrap_content" />

    <TextView android:id="@+id/userlastname"
        android:layout_width="@dimen/user_list_width"
        android:layout_height="wrap_content"
        style="@style/User_List"
        android:text="last name"/>

    <Space
        android:layout_width="5dp"
        android:layout_height="wrap_content" />

    <TextView android:id="@+id/userlastlogin"
        android:layout_width="@dimen/user_list_width"
        android:layout_height="wrap_content"
        style="@style/User_List"
        android:text="last login"/>

</LinearLayout>

【讨论】:

    猜你喜欢
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多