Dynamicznie aktualizuj ViewPager?

Nie mogę zaktualizować treści w ViewPager.

Pytanie: Jaka jest relacja i poprawne użycie metod instantiateItem () i getItem () w klasie FragmentPagerAdapter?

Używałem tylko getItem () do tworzenia instancji i zwracania moich fragmentów:

@Override
public Fragment getItem(int position) {
    return new MyFragment(context, paramters);
}

To działało dobrze (ale jak powiedziałem, nie mogę zmienić treści).

Więc znalazłem to:ViewPager PagerAdapter nie aktualizuje widoku

Szczególnie ten, w którym mówi się o metodzie instantiateItem ():

„Moim podejściem jest użycie metody setTag () dla dowolnego wystąpienia instancji w metodzie instantiateItem ()”

Więc teraz chcę zaimplementować instantiateItem (), aby to zrobić. Ale nie wiem, co tam muszę zwrócić (return to Object) i jaka jest relacja z getItem (pozycja int)?

Obecnie używam getItem do tworzenia instancji Fragmentu, czy to źle? Ale czy muszę umieszczać fragmenty w zmiennej instancji, czy nie zaimplementować getItem () w ogóle ...? Po prostu tego nie rozumiem.

Próbowałem czytaćodniesienie:

public abstract Fragment getItem (pozycja int)

Zwróć fragment powiązany z określoną pozycją.

public Object instantiateItem (kontener ViewGroup, pozycja int)

Utwórz stronę dla danej pozycji. Adapter jest odpowiedzialny za dodanie widoku do podanego tutaj kontenera, chociaż musi jedynie zapewnić, że zostanie to wykonane do czasu powrotu z finishUpdate (ViewGroup). Parametry

container Widok zawierający, w którym strona zostanie wyświetlona. position Pozycja strony do utworzenia instancji.

Zwraca

Zwraca obiekt reprezentujący nową stronę. To nie musi być Widokiem, ale może być innym pojemnikiem strony.

... ale wciąż nie rozumiem, jak są spokrewnieni i co muszę zrobić.

Oto mój kod. Używam pakietu wsparcia v4.

ViewPagerTest

public class ViewPagerTest extends FragmentActivity {
    private ViewPager pager;
    private MyFragmentAdapter adapter; 

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.pager1);

        pager = (ViewPager)findViewById(R.id.slider);

        String[] data = {"page1", "page2", "page3", "page4", "page5", "page6"};

        adapter = new MyFragmentAdapter(getSupportFragmentManager(), 6, this, data);
        pager.setAdapter(adapter);

        ((Button)findViewById(R.id.button)).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                reload();
            }
        });
    }

    private void reload() {
        String[] data = {"changed1", "changed2", "changed3", "changed4", "changed5", "changed6"};
        //adapter = new MyFragmentAdapter(getSupportFragmentManager(), 6, this, data);
        adapter.setData(data);
        adapter.notifyDataSetChanged();
        pager.invalidate();

        //pager.setCurrentItem(0);
    }
}

MyFragmentAdapter

class MyFragmentAdapter extends FragmentPagerAdapter {
    private int slideCount;
    private Context context;
    private String[] data;

    public MyFragmentAdapter(FragmentManager fm, int slideCount, Context context, String[] data) {
        super(fm);
        this.slideCount = slideCount;
        this.context = context;
        this.data = data;
    }

    @Override
    public Fragment getItem(int position) {
        return new MyFragment(data[position], context);
    }

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

    public void setData(String[] data) {
        this.data = data;
    }

    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }
}

MyFragment

public final class MyFragment extends Fragment {
    private String text;

    public MyFragment(String text, Context context) {
        this.text = text;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.slide, null);
        ((TextView)view.findViewById(R.id.text)).setText(text);

        return view;
    }
}

Oto także ktoś z podobnym problemem, bez odpowiedzi ...

http://www.mail-archive.com/[email protected]/msg200477.html

questionAnswers(19)

yourAnswerToTheQuestion