ボタンをクリックして、ビューページャーフラグメントを変更しようとしています。 5つのフラグメントがあり、各フラグメントには独自のxmlファイル(frag1.xml、frag2.xmlなど)があります。すべてのフラグメントには、ビューページャーの他のページに移動する必要がある5つのボタンがあります。しかし、問題は、どのボタンがクリックされたかをFragmentPageAdapterでチェックインする方法と、そこに到達する方法です。
私が持っているコードを表示します。そうすれば、それは明確になるはずです。下部にドットがあるホーム画面のように考えて、特定のドットをクリックすると、対応する画面に移動します。
FragmentPagerAdapter
public class MyFragmentPagerAdapter extends FragmentPagerAdapter{
final int PAGE_COUNT = 6;
/** Constructor of the class */
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
/** This method will be invoked when a page is requested to create */
@Override
public Fragment getItem(int arg0) {
switch(arg0){
case 0:
return new Fragment1();
case 1:
return new Fragment2();
case 2:
return new Fragment3();
case 3:
return new Fragment4();
case 4:
return new Fragment5();
default:
return null;
}
}
/** Returns the number of pages */
@Override
public int getCount() {
return PAGE_COUNT;
}
}
Frag1.Java
public class Frag1 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.frag_one, container, false);
OnClickListener changeFrag = new OnClickListener() {
@Override
public void onClick(View v) {
/*When I click this button in my fragment, I'd like it to go to fragment 3 for example*/
}
};
ImageButton btnT = (ImageButton) v.findViewById(R.id.frag3);
btnT.setOnClickListener(changeFrag);
return v;
}
}
MainActivity
パブリッククラスMainActivityはFragmentActivityを拡張します{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);/** Getting a reference to the ViewPager defined the layout file */
ViewPager pager = (ViewPager) findViewById(R.id.pager);
/** Getting fragment manager */
FragmentManager fm = getSupportFragmentManager();
/** Instantiating FragmentPagerAdapter */
MyFragmentPagerAdapter pagerAdapter = new MyFragmentPagerAdapter(fm);
/** Setting the pagerAdapter to the pager object */
pager.setAdapter(pagerAdapter);
//pager.setPageTransformer(true, new ZoomOutPageTransformer());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
このようなことは可能ですか?誰かが正しい方向に私を助けてくれますか?
「変化」についてあなたが正確に何を言ったかはわかりません。
ページ表示インデックスの変更について質問している場合は、試すことができます
ViewPager.setCurrentItem(int pageIndex, boolean isSmoothScroll);
または、コンテンツの変更について質問している場合は、これが私がしたことです
public class MyPagerAdapter extends FragmentStatePagerAdapter
{
private FragmentManager fragMan;
private ArrayList<Fragment> fragments=new ArrayList<Fragment>();
public void clearAll() //You can clear any specified page if you want...
{
for(int i=0; i<fragments.size(); i++)
fragMan.beginTransaction().remove(fragments.get(i)).commit();
fragments.clear();
fragments=new ArrayList<Fragment>();
notifyDataSetChanged();
}
public void addList() //Add some new fragment...
{
listFrag=new ListFragment();
fragments.add(list);
}
}
お役に立てば幸いです〜
私が見ることができることから、本当の答えは受け入れられた答えのコメントにあるので、私は新しい答えを投稿しています:
「2つの方法があります。1)ViewPagerオブジェクトをpublic staticとして配置し、任意のフラグメントにアクセスできるようにします。2)ViewPagerをFragmentActivityのメンバーとして保持し、フラグメントからFragmentActivityにブロードキャストインテントを送信します。 、およびViewPagerオブジェクトにアクセスします。– RRTW 2013年5月28日2:18 "
その答えをくれたRRTWに感謝しますが、私はそれを改善したいと思います。
1)オプションではありません。フラグメントの目的は再利用可能であるため、アクティビティから独立している必要があります。それらをアクティビティにリンクすることは、たとえ-今のところ-他のアクティビティでそれを再利用していなくても、悪い習慣だと思います。
2)とてもいい音ですが、もっと説明が必要だと思います。 getAcitivty()。sendBroadcast()の目的は、ユーザーのシステムのすべてのアプリケーションにイベントを送信することです。それは間違いなくあなたが達成したいことではありません。したがって、私の観点からすると、良い答えはLoacalBroadcastManagerを使用することです。そして、 その投稿 を見て、その使用方法を理解することができます。