我有一个回收站视图,可以生成所有联系人和每个联系人的电话号码(如果他们有多个)。当我测试我的代码时,在我的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>
答案 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在列表中存储电话。