私はチュートリアルに従い、3 つのフレームで ViewPager を構築することができました。ボタンのクリックも登録し(xml onClickを使用)、ボタンのテキストを「クリック:1」、「クリック:2」などに変更するたびに...私が成功しなかったのはViewPager を即座に更新して、ボタンの新しいテキストを表示します (ボタンは更新されません)。
私の主なインスピレーションの源:
http://thepseudocoder.wordpress.com/2011/10/05/android-page-swiping-using-viewpager/
これは私の FragmentActivity です:
package com.fragmentviewpager;
import java.util.List;
import java.util.Vector;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
public class MainActivity extends FragmentActivity {
private PagerAdapter pagerAdapter;
ViewPager pager;
Button buttonLeft;
int clickCounter = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.viewpager_layout);
pager = (ViewPager) findViewById(R.id.viewpager);
buttonLeft = (Button) findViewById(R.id.buttonLeft);
//initialise the viewpager
initialisePaging();
}
private void initialisePaging() {
List<Fragment> fragments = new Vector<Fragment>();
fragments.add(Fragment.instantiate(this, FragmentLeft.class.getName()));
fragments.add(Fragment.instantiate(this, FragmentMiddle.class.getName()));
fragments.add(Fragment.instantiate(this, FragmentRight.class.getName()));
pagerAdapter = new PagerAdapter(getSupportFragmentManager(), fragments);
pager.setAdapter(this.pagerAdapter);
pager.setCurrentItem(1);
}
// THIS IS THE PLACE WHERE I NEED TO ADD SOMETHING FOR WANTED RESULT
public void buttonClick(View v) {
++clickCounter;
buttonLeft.setText("Clicks: " + clickCounter);
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
}
}
そして、これは私の FragmentPageAdapter です:
package com.fragmentviewpager;
import java.util.List;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.view.ViewGroup;
public class PagerAdapter extends FragmentPagerAdapter {
private List<Fragment> fragments;
public PagerAdapter(FragmentManager fm, List<Fragment> frags) {
super(fm);
fragments = frags;
}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public int getCount() {
return fragments.size();
}
}
私は次のようなことをしようとしました
pagerAdapter.notifyDataSetChanged();
と
pagerAdapter.startUpdate((ViewGroup)findViewById(R.layout.viewpager_layout));
pagerAdapter.instantiateItem((ViewGroup)findViewById(R.layout.viewpager_layout), 0);
pagerAdapter.finishUpdate((ViewGroup)findViewById(R.layout.viewpager_layout));
しかし、何も機能していないようで、ViewPager または Fragments の性質上、本質的な何かを誤解していると思われます。
この質問ViewPager PagerAdapter not updates the Viewを読みましたが、混乱するだけです。alvarolb は何かに取り組んでいると思いますが、彼の提案を自分のコードに実装することはできません。