且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

在ListView控件显示空列表项嵌套的片段,(只有textviews不是图像)

更新时间:2023-12-05 16:32:34

您code应该工作,我认为这个问题是你的 contact_item.xml 布局。不知怎的,你的设计是隐藏的文本。用一个简单的布局设计,看它是否显示文本,试图摆脱的LinearLayout的:

 <?XML版本=1.0编码=UTF-8&GT?;
<的RelativeLayout的xmlns:机器人=htt​​p://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>