【问题标题】:listview data not shows in fragment列表视图数据未显示在片段中
【发布时间】:2013-10-19 10:04:55
【问题描述】:

我有一个片段 FragmentTab1 并且我想替换由一个列表视图和两个按钮组成的 AllContactsFragment 片段。替换效果很好,但 ListView 中没有显示数据。数据也显示在 log cat 中。

FragmentTab1里面的替换代码是:

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

我在 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) {

    } 
}

我还分享了我的 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);

    }
}

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>

可能是我遗漏了什么吗?

已编辑:使上述代码正确。

从 ListView 定义 XML 中删除 android:layout_below="@+id/imageViewLine1" ,从适配器中的 getView() 中删除 return null 并检查设置为 listview 的数据是否可用。

【问题讨论】:

  • 为什么要尝试在getView 中捕获并删除这个return null
  • 也删除此if (container == null) { return null; } 并尝试
  • 你有这个android:layout_below="@+id/imageViewLine1" id为imageViewLine1的视图
  • @Raghunandan:听从您的建议
  • @Raghunandan 仍然无法正常工作..

标签: java android android-listview android-fragments actionbarsherlock


【解决方案1】:

我会试试的

1) 在 xml 中将您的列表视图设置为“高于”您的线性布局按钮栏

2) 创建 ContactListAdapter 适配器后调用 adapter.notifyDataSetChanged()

3) 在适配器中的第一个 if - 之后 convertView.setTag(holder);设置返回转换视图;

4) 在 onViewCreated() 方法中创建和设置适配器

用一个图像视图替换你的列表视图一次,看看你是否会看到图像,而不是你确定列表视图是失败的(不要忘记设置背景!)

【讨论】:

    【解决方案2】:

    哇!我是个多么愚蠢的人?我的 contactNumberlist 是空的,因为我没有在列表中添加对象。我的原木猫误导了我。感谢@Ragunandan 和@tom Nobleman,感谢他们发现错误的能力。

    我的 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-28
      • 1970-01-01
      • 2021-09-29
      • 2018-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多