Intereting Posts
Активировать меню CAB, когда OnClickEvent происходит в Android Как написать собственное контекстное меню для копирования и вставки? В чем разница между начальным / конечным маржем Android и правым / левым? Как использовать Git на Android? Как создать полупрозрачную страницу инструкций в Android? OkHttp как регистрировать тело запроса Получение пароля имени пользователя в веб-форме asp.net, отправленной из приложения Android. Android: загрузка растрового изображения альфа-маски Как я могу отправить электронное письмо из приложения Android напрямую, не указав форму электронной почты по умолчанию на устройстве? Развернуть приложение для Android на реальном устройстве Проблемы с Android XML Editor и Eclipse … Трудно вручную редактировать XML Android, программно макет кнопки просмотра? Имя пакета не соответствует пути к файлу Панель автоматической прокрутки Пользовательский linearlayout, на конструкторе получить все детские просмотры

Adapt chrisbanes ActionBar-PullToRefresh для фрагментов (NavigationDrawer)

Хорошо, вот моя проблема:

Я хочу реализовать библиотеку ActionBar-PullToRefresh от Chrisbanes с фрагментами, чтобы иметь возможность использовать ее с NavigationDrawer.

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

,

Chrisbanes говорит об этом для использования с фрагментами:

Следует отметить, что PullToRefreshAttacher необходимо создать на этапе onCreate () Activity. Если вы планируете использовать эту библиотеку с помощью фрагментов, лучше всего для вашей деятельности создать PullToRefreshAttacher, а затем вернуть фрагменты из Activity.

Пример приведен в примере фрагментов и вкладок.

,

,

**** Вот и возникает вопрос: я создал PullToRefreshAttacher в своей деятельности, но как, черт возьми, я могу передать PullToRefreshAttacher мои фрагменты: S ****

Я много читал о связках и getArguments () с putSerializable и Parcelable:

Передача объекта из объекта в фрагмент

И я также прочитал эту статью, в которой sth. ((MyActivity ) getActivity()).getClassX() ; этого ((MyActivity ) getActivity()).getClassX() ; используется.

Вызов метода активности из фрагмента

Но я ничего не понял и не работал. 🙁

,

,

Вот NavigationActivity и один пример фрагмента. Я должен сказать, что я новичок в 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 извините за плохой язык, я не носитель языка;)

На странице 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; } 

И это для onCreateView в вашем фрагменте:

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

Лучшим подходом было бы использование интерфейса, но я бы рекомендовал начать с примера GitHub.