简体   繁体   English

listview数据未显示在片段中

[英]listview data not shows in fragment

I have a fragment FragmentTab1 & I want to replace AllContactsFragment fragment which consists a listview & two button. 我有一个FragmentTab1片段 ,我想替换由列表视图和两个按钮组成的AllContactsFragment片段。 The replacement performs well, but data is not showing in ListView . 替换执行得很好,但是ListView中没有显示数据。 Data shows in log cat as well. 数据也显示在log cat中。

The replacement code Inside FragmentTab1 is: FragmentTab1内部的替换代码为:

AllContactsFragment allContactsFragment = new AllContactsFragment();
FragmentTransaction transaction = getFragmentManager()
                .beginTransaction();
transaction.addToBackStack(null);
transaction.add(R.id.fragmentTabLayout1, allContactsFragment);
transaction.commit();

I fill up data in listview inside AllContactsFragment like: 我在AllContactsFragment内的listview中填充数据,如下所示:

    public class AllContactsFragment extends SherlockFragment implements
        OnClickListener {

    ListView listViewAllContact;
    Button btnAdd, btnCacel;
    List<BlockNumber> contactNumberlist;
    View rootView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        rootView = inflater.inflate(R.layout.fragment_all_contacts, container,
                false);
        // data are comes well & checked in Log cat
        contactNumberlist = PhoneUtils.getAllContacts(getActivity());
        listViewAllContact = (ListView) rootView
                .findViewById(R.id.listViewAllContact);

        ContactListAdapter adapter = new ContactListAdapter(getActivity(),
                contactNumberlist, m_onSelectedEventCalender);

        listViewAllContact.setAdapter(adapter);

        if (container == null) {
            return null;
        }
        return rootView;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

    }
    @Override
    public void onClick(View v) {

    } 
}

I also share my ContactListAdapter adapter 我也共享我的ContactListAdapter适配器

   public class ContactListAdapter extends BaseAdapter {

    private List<BlockNumber> allContactsNumbers = null;
    public Context context;
    public LayoutInflater inflater;
    private ViewHolder holder;

    private onSelectedEventCalender m_onSelectedEventCalender;

    public ContactListAdapter(Context context, List<BlockNumber> allNumberList,
            onSelectedEventCalender m_onSelectedEventCalender) {

        super();
        this.context = context;
        this.allContactsNumbers = allNumberList;
        this.inflater = (LayoutInflater) this.context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        this.m_onSelectedEventCalender = m_onSelectedEventCalender;
    }

    @Override
    public int getCount() {

        return allContactsNumbers.size();
    }

    @Override
    public Object getItem(int position) {

        return position;
    }

    @Override
    public long getItemId(int position) {

        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        try {

            if (convertView == null) {
                holder = new ViewHolder();

                convertView = inflater.inflate(R.layout.list_row, null);
                convertView.setMinimumHeight(50);

                holder.textViewContactName = (TextView) convertView
                        .findViewById(R.id.textview_contact_name);

                holder.textView_Contact_Number = (TextView) convertView
                        .findViewById(R.id.textview_number);

                convertView.setTag(holder);

            } else {
                holder = (ViewHolder) convertView.getTag();

                holder.textViewContactName.setText(allContactsNumbers.get(
                        position).getName());

                holder.textView_Contact_Number.setText(allContactsNumbers.get(
                        position).getNumber());

                holder.textViewContactName.setTag(allContactsNumbers
                        .get(position));

                return convertView;
            }

        } catch (Exception ex) {
            Log.w("Exception", ex.getMessage());
        }

        return null;

    }

    public static class ViewHolder {

        TextView textViewContactName;
        TextView textView_Contact_Number;
        // TextView textViewEventEndDate;
    }

    public interface onSelectedEventCalender {
        void onSelectedEventCalender(BlockNumber aBlockNumber, int type);

    }
}

Corresponding XML for AllContactsFragment is fragment_all_contacts.xml : AllContactsFragment的对应XML为fragment_all_contacts.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_new" >

<!-- android:background="#80000000" -->

<RelativeLayout
    android:id="@+id/relativeLayoutFragmentMain"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <ListView
        android:id="@+id/listViewAllContact"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/imageViewLine1" >
    </ListView>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dip"
        android:layout_alignParentBottom="true"
        android:background="@drawable/action_bar"
        android:gravity="center_vertical"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/btnAdd"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="8dip"
            android:layout_weight="1"
            android:text="Add" />

        <Button
            android:id="@+id/btnCanel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="8dip"
            android:layout_weight="1"
            android:text="Home" />
    </LinearLayout>
</RelativeLayout>
</RelativeLayout>

May be I am missing something? 可能是我缺少什么吗?

Edited : to make above code right. 编辑 :使上述代码正确。

remove android:layout_below="@+id/imageViewLine1" from ListView definition XML , remove return null from getView() in adapter & check the data is available or not which is set to listview. 从ListView定义XML中删除android:layout_below =“ @ + id / imageViewLine1”,从适配器的getView()中返回return null并检查是否设置了listview数据可用。

i would try 我会尝试

1) in xml set your listview "above" your linear-layout-button-bar 1)在xml中将您的listview设置在“ linear-layout-button-bar”上方

2) after creating ContactListAdapter adapter call adapter.notifyDataSetChanged() 2)创建ContactListAdapter适配器后,调用adapter.notifyDataSetChanged()

3) in the adapter in the first if - after convertView.setTag(holder); 3)在适配器中的第一个if-convertView.setTag(holder)之后; set return convertView; 设置return convertView;

4) create and set the adapter in the onViewCreated() Method 4)在onViewCreated()方法中创建并设置适配器

or 要么

replace your listview once with an imageview and look if you will see the image, than you know for sure that the listview is the one that fails (don't forget to set a background!) 用imageview替换一次listview,然后查看是否会看到该图像,因此您肯定会确定listview是失败的那个(不要忘记设置背景!)

Woh! 喔! What a foolish I am? 我是多么愚蠢? My contactNumberlist is empty because I don't add the object in the list. 我的contactNumberlist为空,因为我没有在列表中添加对象。 My Log cat misleading me. 我的原木猫误导了我。 Thanks for @Ragunandan & @tom nobleman for their great afford to find mistakes. 感谢@Ragunandan和@tom贵族为发现错误所付出的巨大努力。

My ContactListAdapter getView() looks like : 我的ContactListAdapter getView()看起来像:

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    if (convertView == null) {
        holder = new ViewHolder();

        convertView = inflater.inflate(R.layout.list_row, null);
        convertView.setMinimumHeight(50);

        holder.textViewContactName = (TextView) convertView
                .findViewById(R.id.textview_contact_name);
        holder.textView_Contact_Number = (TextView) convertView
                .findViewById(R.id.textview_number);
        holder.imgViewContactImage = (ImageView) convertView
                .findViewById(R.id.imgViewContactImage);

        convertView.setTag(holder);

    } else
        holder = (ViewHolder) convertView.getTag();

    if (allContactsNumbers.size() <= 0) {
        holder.textViewContactName.setText("No Data");

    } else {
        holder = (ViewHolder) convertView.getTag();

        String name = allContactsNumbers.get(position).getName();
        holder.textViewContactName.setText(name);

        String number = allContactsNumbers.get(position).getNumber();
        holder.textView_Contact_Number.setText(number);

        Uri Uri = allContactsNumbers.get(position).getImage_Uri();
        if (Uri != null) {
            holder.imgViewContactImage.setImageURI(Uri);
        } else {
            holder.imgViewContactImage.setImageResource(R.drawable.ic_no_image);
        }

        Log.d("Contacts in Adapter", "" + name + "" + number);

    }
    return convertView;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM