在ListView控件显示空列表项嵌套的片段,(只有textviews不是图像) [英] ListView in nested fragment showing empty list item, (only textviews not images)

查看:137
本文介绍了在ListView控件显示空列表项嵌套的片段,(只有textviews不是图像)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

很多谷歌上搜索后,我从来没有发现任何有用的答案,所以我在这里发布我的问题。我的问题如下:
我有一个嵌套的片段( MainActivity 通话 SettingsFragment 和段调用命名为另一片段ContactFragment )表示,它使用了一个列表视图。我设置适配器的数据,但和呼叫 adapter.notifyDataSetChanged(); 它与添加项目的ListView ,但仅显示图片不是 TextViews 。我调试我的code逐行每个变量都有其值,但列表中的项目没有显示出来。下面是我的code。

  ContactsFragment延伸片段{    公共静态列表< ContactItem>联系人列表;
    私人ContactsItemAdapter适配器;
    私人的ListView lvContacts;    @覆盖
    公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
            捆绑savedInstanceState){       查看rootView = inflater.inflate(R.layout.fragment_contacts,集装箱,FALSE);
       返回rootView;
    }    @覆盖
    公共无效onActivityCreated(捆绑savedInstanceState){
        super.onActivityCreated(savedInstanceState);        。lvContacts =(ListView控件)getView()findViewById(R.id.lvContacts);        contactList =新的ArrayList< ContactItem>();
        contactList.add(新ContactItem(R.drawable.ic_action_overflow,溢出,测试,SOS.CONTACT_TYPE_SMS));        适配器=新ContactsItemAdapter(getActivity(),R.layout.contact_item,contactList);
        lvContacts.setAdapter(适配器);
    }

下面是一个点击事件添加项目到列表中。

 私人无效btnAddOnClick(整型){
        contactList.add(新ContactItem(R.drawable.ic_action_call,ABC,123,SMS));
        adapter.notifyDataSetChanged();
    }}

以下是的 fragment_contacts.xml

 <?XML版本=1.0编码=UTF-8&GT?;
< LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent
    机器人:重力=CENTER_HORIZONTAL
    机器人:方向=垂直>    < ListView控件
        机器人:ID =@ + ID / lvContacts
        机器人:layout_width =match_parent
        机器人:layout_height =FILL_PARENT
        机器人:layout_marginLeft =10dp
        机器人:layout_marginRight =10dp>    < /&的ListView GT;
< / LinearLayout中>

致电 btnAddOnClick 补充项目列表视图中的空,但像这样

在这里你可以看到它显示的呼叫图标,但没有显示文本视图值。请告诉我,我做错了什么。

这是适配器

 公共类ContactsItemAdapter扩展ArrayAdapter< ContactItem> {    私人LayoutInflater mInflater;    公共ContactsItemAdapter(上下文的背景下,INT资源,
            清单< ContactItem>联系人列表) {
        超级(上下文,资源,contactList);
        mInflater =(LayoutInflater)上下文
                .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
    }    @覆盖
    公共查看getView(INT位置,查看convertView,父母的ViewGroup){        ViewHolder支架=无效;        TextView的tvName;
        TextView的tvValue;
        ImageView的ivIcon;        ContactItem rowData = ContactsFragment.contactList.get(位置);        如果(空== convertView){
            convertView = mInflater.inflate(R.layout.contact_item,NULL);
            持有人=新ViewHolder(convertView);
            convertView.setTag(保持器);
        }
        支架=(ViewHolder)convertView.getTag();        tvName = holder.getName();
        tvName.setText(rowData.getName());        tvValue = holder.getValue();
        tvValue.setText(rowData.getValue());        ivIcon = holder.getIcon();
        ivIcon.setImageResource(rowData.getIcon());        返回convertView;
    }    公共类ViewHolder {
        私人查看MROW;        私人TextView的tvName = NULL;
        私人TextView的tvValue = NULL;
        私人ImageView的ivIcon = NULL;        公共ViewHolder(查看行){
            MROW =排;
        }        公众的TextView的getName(){
            如果(空== tvName){
                tvName =(TextView中)mRow.findViewById(R.id.tvName);
            }
            返回tvName;
        }        公众的TextView的getValue(){
            如果(空== tvValue){
                tvValue =(TextView中)mRow.findViewById(R.id.tvValue);
            }
            返回tvValue;
        }        公共ImageView的调用getIcon(){
            如果(空== ivIcon){
                ivIcon =(ImageView的)mRow.findViewById(R.id.icon);
            }
            返回ivIcon;
        }
    }
}

ContactItem类

 公共类ContactItem {    私人诠释图标;
    私人字符串名称;
    私人字符串值;    私人字符串contactType;    公共ContactItem(){
        图标= R.drawable.ic_action_call;
        NAME =;
        值=;
        contactType =;
    }    公共ContactItem(INT图标,字符串nameString,字符串的valueString,
            字符串类型){
        this.icon =图标;
        this.name = nameString;
        THIS.VALUE =的valueString;
        this.contactType =类型;
    }    公众诠释调用getIcon(){
        返回图标;
    }    公共无效的setIcon(INT图标){
        this.icon =图标;
    }    公共字符串的getName(){
        返回名称;
    }    公共无效setname可以(字符串名称){
        this.name =名称;
    }    公共字符串的getValue(){
        返回值;
    }    公共无效的setValue(字符串值){
        THIS.VALUE =价值;
    }    公共字符串getContactType(){
        返回contactType;
    }    公共无效setContactType(字符串contactType){
        this.contactType = contactType;
    }}

contact_item.xml

 <?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/>    <的LinearLayout
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:layout_above =@ + ID /除法
        机器人:layout_alignParentTop =真
        机器人:layout_toLeftOf =@ + ID / ivCancel
        机器人:layout_toRightOf =@ + ID /图标
        机器人:方向=垂直
        机器人:weightSum =1>        <的TextView
            机器人:ID =@ + ID / tvName
            机器人:layout_width =match_parent
            机器人:layout_height =WRAP_CONTENT
            机器人:layout_weight =0.49
            机器人:重力=center_vertical
            机器人:paddingRight =40dp
            机器人:ellipsize =结束
            机器人:文字=瑙曼祖拜尔/>        <的TextView
            机器人:ID =@ + ID / tvValue
            机器人:layout_width =match_parent
            机器人:layout_height =WRAP_CONTENT
            机器人:layout_weight =0.49
            机器人:paddingRight =40dp
            机器人:ellipsize =结束
            机器人:重力=center_vertical
            机器人:文字=+ 92 123 1234567/>    < / LinearLayout中>< / RelativeLayout的>


解决方案

您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>

这篇关于在ListView控件显示空列表项嵌套的片段,(只有textviews不是图像)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆