我正在处理一个处理联系人的应用程序。我需要一个自定义活动来打开联系人列表中的联系人,该活动应显示所有详细信息。
在这里,我需要将标签显示为"移动" /"工作" /"家庭"和相应的数字。
我的问题是,Listview高度不正常。我尝试在xml中的代码下面。
open_contact.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ffff">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="120dp"
android:orientation="vertical"
android:gravity="center">
<ImageView
android:id="@+id/imgView_open_contact"
android:layout_width="90dp"
android:layout_height="90dp"
android:layout_gravity="center_vertical|center_horizontal"
android:layout_marginTop="20dp"
android:layout_marginBottom="8dp"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="vertical"
android:gravity="center">
<TextView
android:id="@+id/txtView_name_open_contact"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:textSize="20sp"
android:textStyle="bold"
android:textColor="#0d0d0d"
android:maxLines="1"
/>
<TextView
android:id="@+id/txtView_company_open_contact"
android:layout_width="wrap_content"
android:layout_height="20dp"
android:textSize="15sp"
android:maxLines="1"
android:orientation="vertical"
android:textColor="#403f3f"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/listView_showAllNumbers"
android:background="#ffff"
android:scrollbars="horizontal"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="30pt"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="15pt"
android:layout_marginStart="16dp"
android:textColor="#0e0e0e"
android:textStyle="bold"
android:id="@+id/txtView_label"/>
<TextView
android:layout_width="match_parent"
android:layout_height="15pt"
android:layout_marginStart="16dp"
android:textColor="#1d34c9"
android:orientation="vertical"
android:id="@+id/txtView_label_value"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
填充数据的相关java代码
openContactActivity.java
.........
@Override
protected void onPostExecute(String r) {
customAdapOpenContact cAdap;
if(mob_index > 0)
{
int i = 0;
//listOpenContact s = new listOpenContact("Mobile", number_mob[0]);
listOpenContact s = new listOpenContact("Mobile");
listItem.add(s);
cAdap = new customAdapOpenContact(getBaseContext(), listItem);
list_showAllNumbers.setAdapter(cAdap);
while(i < mob_index){
Log.e("DEBUG: ", "NUMBER: " + number_mob[i]);
listOpenContact n = new listOpenContact(number_mob[i]);
listItem.add(n);
cAdap = new customAdapOpenContact(getApplicationContext(), listItem);
list_showAllNumbers.setAdapter(cAdap);
i++;
}
}
.......
listOpenContact.java
public class listOpenContact {
String label;
// String label_content;
//Constructor for Single row
listOpenContact (String label) {
this.label = label;
//this.label_content = label_content;
}
}
customAdapOpenContact.java
public class customAdapOpenContact extends BaseAdapter {
private Context c;
private ArrayList<listOpenContact> list;
customAdapOpenContact(Context context, ArrayList<listOpenContact> list){
c = context;
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View row = inflater.inflate(R.layout.open_contact, null, false);
TextView label = (TextView) row.findViewById(R.id.txtView_label);
TextView label_content = (TextView) row.findViewById(R.id.txtView_label_value);
listOpenContact listOpenContact = list.get(position);
if(listOpenContact.label == "Mobile" || listOpenContact.label == "Work" || listOpenContact.label == "Home")
label.setText(listOpenContact.label);
else
label_content.setText(listOpenContact.label);
Log.e("DEBUG: ", "Size: " + listOpenContact.label.length());
return row;
}
}
有人可以帮我解决我的xml错误吗?或者请建议新代码以获得预期的布局(listview部分)
答案 0 :(得分:1)
然后主要的问题是你为活动和列表项提供了单一布局,并且你为每个项目提供了维度而你没有设置默认值,所以在你的适配器中它会尝试创建你的视图而它只会设置移动号码部分所以剩余的项目是空的,所以它看起来像空的空间。
要检查这一点,请尝试在布局中给出一些值,它会显示在每个项目中,以便为您的活动和下面的列表项创建2个单独的布局
检查open_contact
的根布局,如果它的wrap_content没有更改为android:layout_height="wrap_content"
您正在将适配器添加到循环更改中,如下所示
将适配器添加到列表外部循环
@Override
protected void onPostExecute(String r) {
customAdapOpenContact cAdap;
if(mob_index > 0) {
int i = 0;
listOpenContact s = new listOpenContact("Mobile");
listItem.add(s);
while(i < mob_index){
Log.e("DEBUG: ", "NUMBER: " + number_mob[i]);
listOpenContact n = new listOpenContact(number_mob[i]);
listItem.add(n);
i++;
}
cAdap = new customAdapOpenContact(getBaseContext(), listItem);
list_showAllNumbers.setAdapter(cAdap);
}
}
创建新布局list_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="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:textColor="#0e0e0e"
android:textStyle="bold"
android:id="@+id/txtView_label"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:textColor="#1d34c9"
android:orientation="vertical"
android:id="@+id/txtView_label_value"/>
</LinearLayout>
将此布局提供给适配器
View row = inflater.inflate(R.layout.list_item, null, false);
并改变您的活动布局,如下所示,
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffff">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="120dp"
android:orientation="vertical"
android:gravity="center">
<ImageView
android:id="@+id/imgView_open_contact"
android:layout_width="90dp"
android:layout_height="90dp"
android:layout_gravity="center_vertical|center_horizontal"
android:layout_marginTop="20dp"
android:layout_marginBottom="8dp"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="vertical"
android:gravity="center">
<TextView
android:id="@+id/txtView_name_open_contact"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:textSize="20sp"
android:textStyle="bold"
android:textColor="#0d0d0d"
android:maxLines="1"
/>
<TextView
android:id="@+id/txtView_company_open_contact"
android:layout_width="wrap_content"
android:layout_height="20dp"
android:textSize="15sp"
android:maxLines="1"
android:orientation="vertical"
android:textColor="#403f3f"/>
</LinearLayout>
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/listView_showAllNumbers"
android:background="#ffff"
android:scrollbars="horizontal"/>
</LinearLayout>
答案 1 :(得分:0)
在布局结构中,您的根布局包含:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffff">
您在这里创建的高度为match_parent
。这就是为什么你的每件商品都是这样的。更改高度wrap_content
。
答案 2 :(得分:0)
尝试将TextView
android:id="@+id/txtView_name_open_contact"
和android:id="@+id/txtView_company_open_contact"
的高度移至wrap_content
(您可以使用padding_top
和padding_bottom
获取一些空间在textViews
附近也会删除android:id="@+id/txtView_company_open_contact"
TextView