0

SherlockListFragmentには、次のコードがあります。

public class RoutesListFragment extends SherlockListFragment {

    private ArrayList<Route> mItems;
    private static final String TAG = "ROUTES LIST";

    RoutesAdapter mAdapter;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstaceState) {

        View view = inflater.inflate(R.layout.fragment_main_lists, container,
                false);

            // When the setListAdapter is called here,
            // it works without any problems

        return view;
    }

    public void updateAdapter() {
        // populate the list
        mItems = Route.getRouteList();
        Log.d(TAG, "Size of mItems : " + mItems.size());
        mAdapter = new RoutesAdapter(getActivity(), R.layout.list_item_routes,
                mItems);

        this.setListAdapter(mAdapter);

    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        Log.d(TAG, "Clicked item " + position);
    }

    private class RoutesAdapter extends ArrayAdapter<Route> {

        private ArrayList<Route> mItems;
        private Context mContext;
        int mTextViewResource;

        public RoutesAdapter(Context context, int textViewResource,
                ArrayList<Route> items) {
            super(context, textViewResource);

            this.mItems = items;
            this.mContext = context;
            this.mTextViewResource = textViewResource;
        }

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

            if (view == null) {
                LayoutInflater inflater = (LayoutInflater) mContext
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                view = inflater.inflate(mTextViewResource, null);
            }

            Route route = mItems.get(position);

            ((TextView) view.findViewById(R.id.route_name)).setText(route
                    .getRouteName());
            ((TextView) view.findViewById(R.id.route_number)).setText(Integer
                    .toString(route.getRouteNumber()));
            ((TextView) view.findViewById(R.id.direction)).setText(route
                    .getDirection().toString());
            ((TextView) view.findViewById(R.id.start_end)).setText(route
                    .getStartingStop() + " - " + route.getEndingStop());

            return view;
        }

    }
}

詳細

  • ArrayList<Route> mItemsが空でないことを確認しました。

  • 関数は、の関数updateAdapter()から呼び出されます。onPostExecuteAsyncTask

  • これSherlockListFragmentViewPagerIndicatorタブで使用されます。

  • setListAdapter() is called from theonCreateView``関数の場合に機能します。

4

2 に答える 2

3

アダプターにある配列を変更してから呼び出すことができます

adapter.notifyDataSetChanged();

新しいアダプタを作成するのではなく

于 2013-01-10T16:52:38.677 に答える
1

jiduvah の答えに追加する必要があります。

どうやら、ArrayAdapterアイテムの独自のコピーがありますArrayList<Route>。したがって。に電話mAdapter.addAll(Route.getRouteList())する前に電話しなければなりませんmAdapter.notifyAll()

updateAdapter関数のコードは次のとおりです。

public void updateAdapter() {
    mAdapter.addAll(Route.getRouteList());
    mAdapter.notifyDataSetChanged();
}

参考文献

リストビューが notifydatasetchanged() 呼び出しで更新されない

于 2013-01-11T00:30:51.353 に答える