RecyclerView textview不完整

时间:2018-03-12 17:21:09

标签: android android-recyclerview

我有一个回收站视图,可以生成所有联系人和每个联系人的电话号码(如果他们有多个)。当我测试我的代码时,在我的logcat中,我得到了所有的电话号码。例如:

I/System.out: name : John Smith, ID : 1
I/System.out: 018-65 5678
I/System.out: 597-676-643-64

但是,当我查看我的模拟器时,只会显示这两个数字中的最后一个。所有联系人都是如此,只显示最后几个数字。

我尝试修改我的xml布局,通过添加:

为所有数字腾出空间
android:maxLines="4"
android:lines="4"

            <TextView
            android:id="@+id/textViewNumber"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/textViewName"
            android:layout_marginStart="10dp"
            android:padding="5dp"
            android:text="@string/numbers" />

但结果是一样的。

我尝试在设置之前循环显示电话号码,但结果是一样的。

        if (cur.getCount() > 0) {
        while (cur.moveToNext()) {
            String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
            String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
            listItem = new ListItem(name, id);
            listItem.setName(name);

            if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
                System.out.println("name : " + name + ", ID : " + id);
                Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[]{id}, null);
                while (pCur.moveToNext()) {
                    phones = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                    System.out.println(phones);

                    for (int i = 0; i <phones.length() ; i++) {
                        listItem.setNumber(phones);
                    }


                }
                pCur.close();
                listItems.add(listItem);
            }
        }
    }

以下是我的Adapter类的一部分:

    @Override
public void onBindViewHolder(ViewHolder holder, int position) {
    ListItem listItem = listItems.get(position);

    holder.nameTextView.setText(listItem.getName());
    holder.numberTextView.setText(listItem.getNumber());
}

@Override
public int getItemCount() {
    return listItems.size();
}

public class ViewHolder extends RecyclerView.ViewHolder {

    public TextView nameTextView;
    public TextView numberTextView;

    public ViewHolder(View itemView) {
        super(itemView);

        nameTextView = itemView.findViewById(R.id.textViewName);
        numberTextView = itemView.findViewById(R.id.textViewNumber);
    }
}

我会感激一些指示。

这是我的整个布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto">

<android.support.v7.widget.CardView
    android:id="@+id/cardView"
    android:layout_width="match_parent"
    android:layout_height="70dp"
    android:layout_marginBottom="8dp"
    android:layout_marginStart="0dp"
    android:layout_marginTop="0dp"
    app:cardElevation="2dp">

<RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:id="@+id/textViewName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="10dp"
            android:padding="5dp"
            android:text="@string/name"
            android:textColor="@color/colorPrimary"
            android:textSize="18sp"
            android:textStyle="bold" />

        <Switch
            android:id="@+id/switch1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_centerVertical="true"
            android:padding="5dp" />

        <TextView
            android:id="@+id/textViewNumber"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/textViewName"
            android:layout_marginStart="10dp"
            android:padding="5dp"
            android:text="@string/numbers" />

    </RelativeLayout>
</android.support.v7.widget.CardView>

2 个答案:

答案 0 :(得分:0)

当您从数据库中获取电话时,您将多个电话号码设置为单个“数字”变量。所以实际上只设置了最后一个数字

for (int i = 0; i <phones.length() ; i++) {
    listItem.setNumber(phones);
}

在listItem上添加一个额外的数字var,并在它不为空时显示

此外,没有理由在迭代字符串时迭代它...这意味着您只是将数字设置为数字有数字的次数

答案 1 :(得分:0)

如果您想存储多个电话号码,则需要更改模态类ListItem如下所示

public class ListItem{

private String name;
private List<String> phones;

ListItem(name,phones){
    this.name=name;
    this.phones = phones;
}

public String getName(){
    return name;
}
public List<String> getPhones(){
    return phones;
}
}

然后应该尝试将每个数字存储在循环中的phones列表中。

修改:使用https://stackoverflow.com/a/15243473/3758972在列表中存储电话。