无法在ListView上显示另一列/ TextView

时间:2017-03-02 06:45:45

标签: android

我正在尝试显示在线数据库中的用户列表

id  username
1   aaaaa
2   bbbbb
3   ccccc

我得到了上面的结果,现在我想添加另一个列/ TextView,除了那些用户名,可能是firstname,或者lastname,

id  username  lastname
1  aaaaa          please
2  bbbbb          help
3  ccccc          me

我相信这部分代码会填充ListView

private void showEmployee(){
    JSONObject jsonObject = null;
    ArrayList<HashMap<String,String>> list = new          ArrayList<HashMap<String, String>>();
    try {
        jsonObject = new JSONObject(JSON_STRING);
        JSONArray result = jsonObject.getJSONArray(Config.TAG_JSON_ARRAY);

        for(int i = 0; i<result.length(); i++){
            JSONObject jo = result.getJSONObject(i);
            String id = jo.getString(Config.TAG_ID);
            String username =     jo.getString(Config.TAG_UNAME);
            //String firstname = jo.getString(Config.TAG_FNAME);



            HashMap<String,String> employees = new HashMap<>();
            employees.put(Config.TAG_ID,id);
            employees.put(Config.TAG_UNAME,username);
          //  employees.put(Config.TAG_UNAME,username);




            list.add(employees);
        }

    } catch (JSONException e) {
        e.printStackTrace();
    }

    ListAdapter adapter = new SimpleAdapter(
            act_viewAllusers.this, list, R.layout.list_item,
            new String[]{Config.TAG_ID,Config.TAG_UNAME},
            new int[]{R.id.id, R.id.username});
  /***  ListAdapter adapter = new SimpleAdapter(
            act_viewAllusers.this, list, R.layout.list_item,
            new String[]{Config.TAG_ID,Config.TAG_UNAME,Config.TAG_FNAME},
            new int[]{R.id.id, R.id.username,R.id.fname}); ***/


    listView.setAdapter(adapter);
}                              

我有一个名为Config.java的独立Java类,它包含一些目前我无法理解的URL和JSON标记。
这是其中的一部分

//JSON Tags
public static final String TAG_JSON_ARRAY="result";

public static final String TAG_ID = "id";
public static final String TAG_UNAME = "username";
public static final String TAG_PWORD = "password";
public static final String TAG_FNAME = "firstname";
public static final String TAG_LNAME = "lastname";
public static final String TAG_BDAY = "birthday";
public static final String TAG_GENDER = "gender";

这是我的ListView的XML

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

    <TextView
        android:layout_marginRight="10dp"
        android:id="@+id/id"
        android:layout_width="40dp"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/username"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/fname"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/lname"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />


</LinearLayout>

ListView的另一个XML文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_act_view_allusers"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.bayona.lesson1.act_viewAllusers">
    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/listView" />

</LinearLayout>

也许添加另一列或TextView是不可能的;没关系,但困扰我的是我无法更改用户名显示 例如,我想显示除了id号

之外的姓氏

2 个答案:

答案 0 :(得分:1)

LinearLayout provides an android:weightSum attribute。您可以将其设置为4以获得均匀的列分布。在这种情况下,每个TextView可以被赋予android:layout_weightandroid:width="0dp"来填充列的权重。

或者您可以使用GridLayout并将4个单元格放在一行中。

或者您可以使用TableRow

重点是,你有选择权。但是,您不应该将ListView视为“电子表格”。您可以根据需要使每个“行”变得复杂。

就个人而言,每一行都可能是这样的。

ID  Username
Lastname, FirstName

或者甚至不显示ID并在用户名之前添加@ ...

Firstname Lastname
@Username

只需使用XML编辑器即可创建所需的任何布局。

就Java代码而言。您只设置了两个值。

ListAdapter adapter = new SimpleAdapter(
        act_viewAllusers.this, 
        list,                                         // data
        R.layout.list_item,                           // layout
        new String[]{Config.TAG_ID,Config.TAG_UNAME}, // from[]
        new int[]{R.id.id, R.id.username});           // to[]

因此,您在from数组中添加了更多字符串,这些字符串设置在to数组中layout数组中的XML ID中。

答案 1 :(得分:0)

尝试这样

      ListAdapter adapter = new SimpleAdapter(
                act_viewAllusers.this, list, R.layout.list_item,
                new String[]{Config.TAG_ID,Config.TAG_UNAME,
    Config.NextTAg,Config.NextTag2},       
                new int[]{R.id.id, R.id.username,R.id.id1,R.id.id2});

如果没有这样做,请检查

    try {
        jsonObject = new JSONObject(JSON_STRING);
        JSONArray result = jsonObject.getJSONArray(Config.TAG_JSON_ARRAY);

        for(int i = 0; i<result.length(); i++){
            JSONObject jo = result.getJSONObject(i);
            String id = jo.getString(Config.TAG_ID);
            String username =     jo.getString(Config.TAG_UNAME);
//-----------------
            String varName=jo.getString(Config.REQ_TAG);
//-------------
            //String firstname = jo.getString(Config.TAG_FNAME);



            HashMap<String,String> employees = new HashMap<>();
            employees.put(Config.TAG_ID,id);
            employees.put(Config.TAG_UNAME,username);

//--------------
  employees.put(Config.REQ_TAG,varName);
//-----------
          //  employees.put(Config.TAG_UNAME,username);




            list.add(employees);
        }