3

アプリケーションのフラグメント内にViewPagerがあります。ViewPager内には、中央のデータソースからデータをプルする6つのリストビューがあります(各リストビューが日数のリストをプルするスケジュール)。ここで、PagerAdapterクラスに格納されているスケジュールを変更してから、すべてのリストビューへのアダプターとして機能するArrayAdapterを更新することにより、このスケジュールオブジェクトを更新しようとしています。1つのリストビューに切り替えると、正しいデータを使用して新しいアレイアダプタが作成されます。

残念ながら、これはまったく機能しません。アプリケーションライフサイクルのどの時点でもデータが表示されません。したがって、データをViewPagerに接続する際に根本的に間違ったことをしていると思います...

私はネットのいたるところにいて、すべてのフラグメントのもの、たくさんのビューページャーのものを読んでいます...誰かがこれを行う正しい方法を知っていますか?

これが私のDayAdapterのコードです(ViewPagerADapter)

public final class DayAdapter extends PagerAdapter {

    //~Data Fields----------------------------------------//
    /**
     * The list adapter that the current list is being handed to.
     */
    private Schedule schedule;
    /**
     * The current index of the day that is to be displayed.
     */
    private int currentIndex;
    /**
     * ArrayAdpter to be used to connect data to all of the list views.
     */
    private ArrayAdapter<Course> adapter;

    //~Constructors---------------------------------------//
    /**
     * Constructor for the DayAdapter implementation of PagerAdapter. Takes in a
     * Schedule object which is to be the data backing of the views displayed.
     * 
     * @param theSChedule the Schedule object that is the backing for the ListViews.
     */
    public DayAdapter(Schedule theSchedule) {

        schedule = theSchedule;
        currentIndex = schedule.getTodayIndex();
    }

    //~Methods--------------------------------------------//
    public void setSchedule(Schedule theSchedule) {

        schedule = theSchedule;

        adapter.clear();
        adapter.add(schedule.getDay(currentIndex).getList().get(0));
        adapter.notifyDataSetChanged();
    }

    @Override
    public Object instantiateItem(ViewGroup container, int index) {

        LayoutInflater inflater = (LayoutInflater) container.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View layout = inflater.inflate(R.layout.schedule_list_view, null);

        ListView view = new ListView(container.getContext());

        adapter = new ArrayAdapter<Course>(container.getContext(), 
                R.layout.list_view_child, schedule.getDay(index).getList());
        view.setAdapter(adapter);

        //TEST CODE!!!! This does not yield any sort data items in the list views!?
        adapter.add(new Course("test", "test", "test", "test", "test", "test", "test"));

        currentIndex = index;

        ((ViewPager) container).addView(layout);

        return layout;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {

        ViewPager pager = (ViewPager) container;
        View view = (View) object;

        pager.removeView(view);
    }

    /**
     * Gets the pageTitle, which is the name of the day that is at position.
     * 
     * @param position the index of the day selected.
     * @return the name of the day the index refers to.
     */
    @Override
    public CharSequence getPageTitle(int position) {
        return schedule.getDay(position).getThisDay();
    }

    @Override
    public int getCount() {
        return 6;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }
}
4

2 に答える 2

3

それがメソッドの完全なコードである場合instantiateItem、リストにデータが表示されないのは正常です。という名前のレイアウト ファイル(ファイルR.layout.schedule_list_viewListViewは. データはレイアウト ファイルにない にバインドされているため、元のファイルが空のままであるため、何も表示されません。instantiateItem ListViewListViewListView

ListView解決策は、インフレートされたレイアウト( R.layout.schedule_list_view)にデータがある場合はそのデータを設定するか、作成されたデータをインListViewフレート レイアウト( layout(これは であるため、またはViewにキャストする必要があります) に追加します。 ))ViewGroupのサブクラスViewGroup

于 2012-09-08T14:46:48.133 に答える
0

新しいデータで新しいアダプタを作成する代わりに、既存のアダプタのデータを変更してみてください。

  1. アダプターに関連付けられたコレクションを取得します。
  2. 必要に応じてコレクションを変更します (コレクションの新しいインスタンスを作成しないでください。コレクションをクリアして新しいコンテンツを追加するか、コレクションを更新することができます)。
  3. アダプターの notifyDataSetChanged() を呼び出します。

これがうまくいくことを願っています... :)

于 2012-09-04T04:53:58.447 に答える