0

フラグメントFragmentTab1があり、リストビューと 2 つのボタンで構成される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 内のリストビューにデータを入力します。

    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>

私は何かが足りないのでしょうか?

編集済み:上記のコードを正しくするため。

android:layout_below="@+id/imageViewLine1" を ListView 定義 XML から削除し、アダプターの getView() から return null を削除し、リストビューに設定されているデータが使用可能かどうかを確認します。

4

2 に答える 2

0

私は試してみます

1)xmlで、リストビューをリニアレイアウトボタンバーの「上」に設定します

2) ContactListAdapter アダプタの作成後、adapter.notifyDataSetChanged() を呼び出します

3) 最初の if - 後 convertView.setTag(holder); のアダプターで。戻りconvertViewを設定します。

4) onViewCreated() メソッドでアダプタを作成して設定します

また

リストビューを一度イメージビューに置き換えて、リストビューが失敗したものであることを確認してから、イメージが表示されるかどうかを確認してください (背景を設定することを忘れないでください!)

于 2013-10-19T10:26:30.803 に答える