更新时间:2023-12-05 16:32:34
您code应该工作,我认为这个问题是你的 contact_item.xml
布局。不知怎的,你的设计是隐藏的文本。用一个简单的布局设计,看它是否显示文本,试图摆脱的LinearLayout的:
<?XML版本=1.0编码=UTF-8&GT?;
<的RelativeLayout的xmlns:机器人=http://schemas.android.com/apk/res/android
机器人:layout_width =match_parent
机器人:layout_height =55dp
机器人:背景=@彩色/ holo_gray_light
机器人:重力=center_vertical> < ImageView的
机器人:ID =@ + ID /图标
机器人:layout_width =25dp
机器人:layout_height =WRAP_CONTENT
机器人:layout_alignParentLeft =真
机器人:layout_centerVertical =真
机器人:layout_marginLeft =12dp
机器人:layout_marginRight =12dp
机器人:contentDescription =@字符串/ desc_list_item_icon/> <查看
机器人:ID =@ + ID /除法
机器人:layout_width =match_parent
机器人:layout_height =1DP
机器人:layout_alignParentBottom =真
机器人:背景=@机器人:彩色/ darker_gray/> < ImageView的
机器人:ID =@ + ID / ivCancel
机器人:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT
机器人:layout_alignParentRight =真
机器人:layout_centerVertical =真
机器人:layout_marginRight =10dp
机器人:SRC =@绘制/ ic_action_cancel/> <的TextView
机器人:ID =@ + ID / tvName
机器人:layout_width =match_parent
机器人:layout_height =WRAP_CONTENT
机器人:layout_alignParentTop =真
机器人:layout_toLeftOf =@ + ID / ivCancel
机器人:layout_toRightOf =@ + ID /图标
机器人:重力=center_vertical
机器人:paddingRight =40dp
机器人:ellipsize =结束
机器人:文字=瑙曼祖拜尔/> <的TextView
机器人:ID =@ + ID / tvValue
机器人:layout_width =match_parent
机器人:layout_height =WRAP_CONTENT
机器人:layout_alignParentBottom =真
机器人:layout_toLeftOf =@ + ID / ivCancel
机器人:layout_toRightOf =@ + ID /图标
机器人:paddingRight =40dp
机器人:ellipsize =结束
机器人:重力=center_vertical
机器人:文字=+ 92 123 1234567/>< / RelativeLayout的>
After googling alot i never found any helpful answer, so i'm posting my issue here. My problem is as follows :
I've a nested fragment (MainActivity
calls SettingsFragment
and that fragment calls another fragment named as ContactFragment
) that uses a listview in it. I'm setting data in adapter but and call adapter.notifyDataSetChanged();
it adds an item with in ListView
but show only images not TextViews
. I debugged my code line by line each variable has its values but list items are not displaying it. Below is my Code.
ContactsFragment extends Fragment {
public static List<ContactItem> contactList;
private ContactsItemAdapter adapter;
private ListView lvContacts;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_contacts, container, false);
return rootView;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
lvContacts = (ListView) getView().findViewById(R.id.lvContacts);
contactList = new ArrayList<ContactItem>();
contactList.add(new ContactItem(R.drawable.ic_action_overflow, "OverFlow", "Testing", SOS.CONTACT_TYPE_SMS));
adapter = new ContactsItemAdapter(getActivity(), R.layout.contact_item, contactList);
lvContacts.setAdapter(adapter);
}
Following is a Click Event for adding an item to the list
private void btnAddOnClick(int type){
contactList.add(new ContactItem(R.drawable.ic_action_call, "ABC", "123", "SMS"));
adapter.notifyDataSetChanged();
}
}
Following is fragment_contacts.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical" >
<ListView
android:id="@+id/lvContacts"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp" >
</ListView>
</LinearLayout>
By Calling btnAddOnClick
adds item in listview but empty like this
here you can see it shows call icon but not showing text views values. Please tell me what i'm doing wrong.
Here is adapter
public class ContactsItemAdapter extends ArrayAdapter<ContactItem> {
private LayoutInflater mInflater;
public ContactsItemAdapter(Context context, int resource,
List<ContactItem> contactList) {
super(context, resource, contactList);
mInflater = (LayoutInflater) context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
TextView tvName;
TextView tvValue;
ImageView ivIcon;
ContactItem rowData = ContactsFragment.contactList.get(position);
if (null == convertView) {
convertView = mInflater.inflate(R.layout.contact_item, null);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
}
holder = (ViewHolder) convertView.getTag();
tvName = holder.getName();
tvName.setText(rowData.getName());
tvValue = holder.getValue();
tvValue.setText(rowData.getValue());
ivIcon = holder.getIcon();
ivIcon.setImageResource(rowData.getIcon());
return convertView;
}
public class ViewHolder {
private View mRow;
private TextView tvName = null;
private TextView tvValue = null;
private ImageView ivIcon = null;
public ViewHolder(View row) {
mRow = row;
}
public TextView getName() {
if (null == tvName) {
tvName = (TextView) mRow.findViewById(R.id.tvName);
}
return tvName;
}
public TextView getValue() {
if (null == tvValue) {
tvValue = (TextView) mRow.findViewById(R.id.tvValue);
}
return tvValue;
}
public ImageView getIcon() {
if (null == ivIcon) {
ivIcon = (ImageView) mRow.findViewById(R.id.icon);
}
return ivIcon;
}
}
}
ContactItem Class
public class ContactItem {
private int icon;
private String name;
private String value;
private String contactType;
public ContactItem() {
icon = R.drawable.ic_action_call;
name = "";
value = "";
contactType = "";
}
public ContactItem(int icon, String nameString, String valueString,
String type) {
this.icon = icon;
this.name = nameString;
this.value = valueString;
this.contactType = type;
}
public int getIcon() {
return icon;
}
public void setIcon(int icon) {
this.icon = icon;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getContactType() {
return contactType;
}
public void setContactType(String contactType) {
this.contactType = contactType;
}
}
contact_item.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="55dp"
android:background="@color/holo_gray_light"
android:gravity="center_vertical" >
<ImageView
android:id="@+id/icon"
android:layout_width="25dp"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginLeft="12dp"
android:layout_marginRight="12dp"
android:contentDescription="@string/desc_list_item_icon"
/>
<View
android:id="@+id/divider"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_alignParentBottom="true"
android:background="@android:color/darker_gray" />
<ImageView
android:id="@+id/ivCancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="10dp"
android:src="@drawable/ic_action_cancel" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/divider"
android:layout_alignParentTop="true"
android:layout_toLeftOf="@+id/ivCancel"
android:layout_toRightOf="@+id/icon"
android:orientation="vertical"
android:weightSum="1">
<TextView
android:id="@+id/tvName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.49"
android:gravity="center_vertical"
android:paddingRight="40dp"
android:ellipsize="end"
android:text="Nauman Zubair"/>
<TextView
android:id="@+id/tvValue"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.49"
android:paddingRight="40dp"
android:ellipsize="end"
android:gravity="center_vertical"
android:text="+92 123 1234567"/>
</LinearLayout>
</RelativeLayout>
Your code should work, I think the problem is your contact_item.xml
layout. Somehow your design is hiding the text. Use a simpler layout design to see if it shows the text, try getting rid of the LinearLayout:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="55dp"
android:background="@color/holo_gray_light"
android:gravity="center_vertical" >
<ImageView
android:id="@+id/icon"
android:layout_width="25dp"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginLeft="12dp"
android:layout_marginRight="12dp"
android:contentDescription="@string/desc_list_item_icon" />
<View
android:id="@+id/divider"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_alignParentBottom="true"
android:background="@android:color/darker_gray" />
<ImageView
android:id="@+id/ivCancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="10dp"
android:src="@drawable/ic_action_cancel" />
<TextView
android:id="@+id/tvName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toLeftOf="@+id/ivCancel"
android:layout_toRightOf="@+id/icon"
android:gravity="center_vertical"
android:paddingRight="40dp"
android:ellipsize="end"
android:text="Nauman Zubair"/>
<TextView
android:id="@+id/tvValue"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_toLeftOf="@+id/ivCancel"
android:layout_toRightOf="@+id/icon"
android:paddingRight="40dp"
android:ellipsize="end"
android:gravity="center_vertical"
android:text="+92 123 1234567"/>
</RelativeLayout>