5

さて、ここに私の問題があります:

Navigationdrawer で使用できるように、フラグメントを使用して Chrisbanes ActionBar-PullToRefresh ライブラリを実装したいと考えています。

https://github.com/chrisbanes/ActionBar-PullToRefresh#fragments

.

Chrisbanes は、フラグメントでの使用について次のように述べています。

注意すべきことの 1 つは、アクティビティの onCreate() フェーズで PullToRefreshAttacher を作成する必要があることです。Fragments でこのライブラリを使用することを計画している場合、ベスト プラクティスは、Activity で PullToRefreshAttacher を作成し、フラグメントに Activity からそれを取得させることです。

Fragment & Tabs サンプルに例が示されています。

.

.

**** ここで質問があります: アクティビティで PullToRefreshAttacher を作成しましたが、どうすれば PullToRefreshAttacher をフラグメントに渡すことができますか :S****

putSerializable と Parcelable を使用した bundle と getArguments() についてよく読んだことがあります。

アクティビティからフラグメントへのオブジェクトの受け渡し

また、この記事も読みました。このよう((MyActivity ) getActivity()).getClassX() ;に使われています。

フラグメントからアクティビティ メソッドを呼び出す

しかし、私が本当に理解した/機能したものは何もありません。:(

.

.

これが NavigationActivity と 1 つのフラグメントの例です。私は Android/Java が初めてだと言わざるを得ません :)

    final String[] menuEntries = {"Start","Datum","Website","Kunden"};
final String[] fragments = {
        "com.blabla.MainFragment",
        "com.blabla.OneFragment",
        "com.blabla.TwoFragment",
        "com.blabla.KundenFragment",
};

private ActionBarDrawerToggle drawerToggle;
private DrawerLayout drawerAdapter;
private ListView navListAdapter;




private PullToRefreshAttacher mPullToRefreshAttacher;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    setContentView(R.layout.navigation_layout);

    mPullToRefreshAttacher = PullToRefreshAttacher.get(this);



    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActionBar().getThemedContext(), android.R.layout.simple_list_item_1, menuEntries);

    final DrawerLayout drawer = (DrawerLayout)findViewById(R.id.refresh_navwiev);
    final ListView navList = (ListView) findViewById(R.id.drawerMenu);

    drawerAdapter=drawer;
    navListAdapter=navList;

    getActionBar().setDisplayHomeAsUpEnabled(true);
    getActionBar().setHomeButtonEnabled(true);


   drawerToggle = new ActionBarDrawerToggle(
            this, 
            drawer,
            R.drawable.navicon,
            R.string.drawer_open,
            R.string.drawer_close
    ) {

        /** Called when a drawer has settled in a completely closed state. */
        public void onDrawerClosed(View view) {

        }

        /** Called when a drawer has settled in a completely open state. */
        public void onDrawerOpened(View drawerView) {

        }


    };

    drawer.setDrawerListener(drawerToggle);



    navList.setAdapter(adapter);
    navList.setOnItemClickListener(new OnItemClickListener(){
        @Override
        public void onItemClick(AdapterView<?> parent, View view, final int pos,long id){
            drawer.setDrawerListener( new DrawerLayout.SimpleDrawerListener(){
                @Override
                public void onDrawerClosed(View drawerView){
                    super.onDrawerClosed(drawerView);
                    //Runs On completly Closed
                }
            });

            //Runs Onclick if not same fragment
            if(getActionBar().getTitle()!= menuEntries[pos])
            {

            Bundle bundle=new Bundle();
            bundle.putString("message", "From Activity");

            //Fragment zusammenbauen
            Fragment myFragment=new Fragment();
            myFragment = Fragment.instantiate(NavigationActivity.this, fragments[pos]);
            myFragment.setArguments(bundle);


                FragmentTransaction tx = getSupportFragmentManager().beginTransaction();
                tx.setCustomAnimations(R.anim.fragmentfadein, R.anim.fragmentfadeout);
                tx.replace(R.id.navigationScreen, myFragment);

                tx.commit();
                getActionBar().setTitle(menuEntries[pos]);
                drawer.closeDrawer(navList);
            }
        }
    });

    Bundle bundle=new Bundle();
 //     bundle.putInt(PullToRefreshAttacher., position);

    //Fragment zusammenbauen
    Fragment myFragment=new Fragment();
    myFragment = Fragment.instantiate(NavigationActivity.this, fragments[0]);
    myFragment.setArguments(bundle);


        FragmentTransaction tx = getSupportFragmentManager().beginTransaction();
        tx.setCustomAnimations(R.anim.fragmentfadein, R.anim.fragmentfadeout);
        tx.replace(R.id.navigationScreen, myFragment);

        tx.commit();

}

public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_MENU) {

        Log.i("FlosTemplate", "Menu Taste Gedrückt");

            if(drawerAdapter.isDrawerOpen(navListAdapter))
            {
            drawerAdapter.closeDrawer(navListAdapter);
            }
            else
            {
            drawerAdapter.openDrawer(navListAdapter);
            }

        return true;
    }
    return super.onKeyUp(keyCode, event);
}

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    drawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    drawerToggle.onConfigurationChanged(newConfig);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (drawerToggle.onOptionsItemSelected(item)) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

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


}

そして断片

public class MainFragment extends Fragment  {

public static Fragment newInstance(Context context) {
    MainFragment f = new MainFragment();
    return f;
}

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



    return rootView;
}

}

誰かが私を助けてくれたらとても親切です、私はこの時点で何日も立ち往生しています:)

PSおそらく悪い言語で申し訳ありません、私はネイティブスピーカーではありません;)

4

1 に答える 1

3

GitHub ページにデモ コードがあります。

https://github.com/chrisbanes/ActionBar-PullToRefresh/blob/master/samples/actionbarcompat/src/java/uk/co/senab/actionbarpulltorefresh/samples/actionbarcompat/FragmentTabsActivity.java

これをアクティビティに追加します。

public PullToRefreshAttacher getPullToRefreshAttacher() {
    return mPullToRefreshAttacher;
}

そして、これを Fragment の onCreateView に:

PullToRefreshAttacher mPullToRefreshAttacher = ((NavigationActivity) getActivity()).getPullToRefreshAttacher();

より良いアプローチはインターフェイスを使用することですが、GitHub の例から始めることをお勧めします。

于 2013-08-15T15:01:19.580 に答える