У меня есть решение сейчас. Я сделал, что создал Фрагмент, который добавит 2 дочерних фрагмента. Эти 2 дочерних фрагмента имеют список и фрагменты фильтра. Вместо того, чтобы делать это через Activity, я сделал это через Fragments. В случае, если кто-то сталкивается с подобной проблемой:
Так вот что Родитель фрагмент Посмотрел, как:
package com.neonwarge.android.note;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.Log;
public class PagerActivity extends BackboneActivity implements NoteListSubFragment.NoteListCallback
{
private final static int NUM_PAGES = 2;
private ViewPager mPager;
private PagerAdapter mPagerAdapter;
private int mCurrentPage;
private HomePageFragment mHomePageFragment;
private NoteDateSelectorFragment mNoteDateSelectorFragment;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Log.i(NoteApplication.TAG, "PagerActivity.onCreate() has been called.");
setTargetLayout(R.layout.activity_pager);
mPagerAdapter = new PagerAdapter(getSupportFragmentManager());
mPager = (ViewPager) findViewById(R.id.activity_home_screen_pager);
mPager.setAdapter(mPagerAdapter);
mCurrentPage = 0;
mPager.setCurrentItem(mCurrentPage);
}
private class PagerAdapter extends FragmentStatePagerAdapter
{
public PagerAdapter(FragmentManager fm)
{
super(fm);
}
@Override
public Fragment getItem(int position)
{
switch(position)
{
case 0:
mHomePageFragment = new HomePageFragment();
return mHomePageFragment;
case 1:
mNoteDateSelectorFragment = new NoteDateSelectorFragment();
return mNoteDateSelectorFragment;
default: break;
}
return null;
}
@Override
public int getCount()
{
return NUM_PAGES;
}
}
@Override
public void onNoteItemSelected(Note note , int type)
{
Intent intent = new Intent(this , NoteActivity.class);
intent.putExtra(NoteFragment.EXTRA_NOTE_ID, note.getNoteID());
intent.putExtra(NoteFragment.EXTRA_INSTANCE_TYPE, type);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivityForResult(intent , 0);
}
@Override
public void onActivityResult(int request, int result, Intent intent)
{
super.onActivityResult(request, result, intent);
Log.i(NoteApplication.TAG, "PageActivity.onActivityResult() called.");
if(intent == null)
return;
switch(mCurrentPage)
{
case 0:
mHomePageFragment.updateSubFragments(request, result, intent);
break;
case 1:
break;
default:
Log.i(NoteApplication.TAG, "PagerActivity.onActivityResult(): page not supported.");
break;
}
}
}
Заметил вот что два фрагмента я предполагаю иметь (который первоначально добавляется активностью) в настоящее время прилагаются в родительский фрагмент с именем HomePageFragment.
Вот как я добавить два ребенка-фрагментов в HomePageFragment:
public class HomePageFragment extends Fragment
{
private NoteListSubFragment mNoteListSubFragment;
private NoteFilterSubFragment mNoteFilterSubFragment;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
setRetainInstance(true);
View v = inflater.inflate(R.layout.fragment_homescreen, container, false);
// add sub_fragments here.
FragmentManager cfm = getChildFragmentManager();
FragmentTransaction cft = cfm.beginTransaction();
mNoteListSubFragment = new NoteListSubFragment();
mNoteFilterSubFragment = new NoteFilterSubFragment();
cft.add(R.id.layout_fragment_container_filter, mNoteFilterSubFragment);
cft.add(R.id.layout_fragment_container_list, mNoteListSubFragment);
cft.commit();
return v;
}
public void updateSubFragments(int request, int result, Intent intent)
{
if(mNoteListSubFragment != null)
mNoteListSubFragment.onNoteListUpdated();
}
}
Как вы можете видеть на этих двух линиях:
cft.add(R.id.layout_fragment_container_filter, mNoteFilterSubFragment);
cft.add(R.id.layout_fragment_container_list, mNoteListSubFragment);
Это на самом деле нацелен на FrameLayout к которой этот фрагмент будет появляются. Изначально я просто повторно файл макета активность и раздувать фрагмент на свои места:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:baselineAligned="false"
android:padding="7dp">
<FrameLayout
android:id="@+id/layout_fragment_container_filter"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
<FrameLayout
android:id="@+id/layout_fragment_container_list"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="30"/>
</LinearLayout>
Я надеюсь, что это поможет кому-то.
Я не уверен, понимаю ли я вашу проблему. Но вы можете отправлять данные, когда вы переключаетесь с одного действия на другое с намерением. Пример из http://developer.android.com/training/basics/firstapp/starting-activity.html: public void sendMessage (View view) { Цель намерения = новое намерение (это, DisplayMessageActivity.class); EditText editText = (EditText) findViewById (R.id.edit_message); String message = editText.getText(). ToString(); intent.putExtra (EXTRA_MESSAGE, message); startActivity (намерение); } – Jure
Правильно мы можем это сделать, но это касается прокрутки между представлениями. Я хочу что-то вроде первой страницы, на которой показан видеоплеер, содержащий два фрагмента: Fragment1> TitleBar и Fragment2> Video на второй странице. Я могу показать какой-то список доступных видео. Проблема в том, что у меня уже есть код и его довольно здоров. У меня есть фрагменты, обменивающиеся с другим фрагментом их базовыми действиями. –