3

ビューページャーの 2 つのフラグメント間で文字列を渡そうとしていますが、正しい方法が見つかりませんでした。これまでの私のコードは次のとおりです。

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 MyFragment();
        case 1:
            return new part2();
        case 2:
            return new Part3();
        case 3:
            return new Part4();
        case 4:
            return new Part5();
        case 5:
            return new Part6();
        default:
            return null;
        }
    }

    /** Returns the number of pages */
    @Override
    public int getCount() {     
        return PAGE_COUNT;
    }

    @Override
    public CharSequence getPageTitle(int position) {        
        return "Page #" + ( position + 1 );
    }





}

public class MainActivity extends FragmentActivity {

    @Override
    public 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);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

ビューページャーでタブを使用していません。フラグメントには何を書けばよいですか?

更新:回答で提案されているようなインターフェイスを実装しようとしました:

public interface OnTogglePressListener {
    public void onTogglePressed(String msg);
}

最初のフラグメント:

@Override
public void onAttach(Activity activity) {
        // TODO Auto-generated method stub
        try {
            buttonListener = (OnTogglePressListener) getActivity();
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString() + " must implement onTogglePressed");
        }
        super.onAttach(activity);
    }

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        buttonListener.onTogglePressed("Off");
... }

2 番目のフラグメント:

public String getEtat(String etat)
    {   state =etat;
        return etat;

    }

主な活動について:

public void onTogglePressed(String etat)
    {
        Part5 p = (Part5)getSupportFragmentManager().findFragmentById(R.layout.frag_2);
        p.getEtat(etat);

    }

しかし、毎回 NullPointerException が発生しました。

4

2 に答える 2

3

あなたは明らかに ViewPager を使用しており、それを利用することができます。次のように ViewPager にタグを追加できます。

アクティビティ:

pager.setTag("some text");  // pager is a ViewPager object

次に、次のようなフラグメントで ViewGroup を介してこのデータを取得できます。

断片:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view =  inflater.inflate(R.layout.fragment_main, container, false);

    String result = container.getTag().toString();
    // do something with the result

    return view;

フラグメント内のコンテナーに Tag() を設定することもできます。

これは、フラグメントとその親アクティビティ間でデータを送信するために私が見つけた最もクリーンなソリューションです。もう 1 つの解決策 (ここではまだ言及されていません) は、SharedPreferences を介してデータを送信することですが、可能であればタグを使用することをお勧めします。

于 2014-11-20T10:56:19.470 に答える
-4

だから私は解決策を見つけました。実装は正しいです。2番目のフラグメントのメソッドで必要な処理を行う必要があるのはそれだけです!

于 2013-09-17T14:05:40.203 に答える