I am using ViewPager
, FragmentStatePagerAdapter
and Fragment
.
How can I load each fragment with it's functionality (first initialization, button handlers)?
I manage to make the buttons to work but I had to move all the handles in the main activity. How can I keep the functionality in the fragment?
Here is my adapter:
public class DemoCollectionPagerAdapter extends FragmentStatePagerAdapter {
public DemoCollectionPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
Fragment fragment = new DemoObjectFragment();
Bundle args = new Bundle();
// Our object is just an integer :-P
args.putInt(DemoObjectFragment.ARG_OBJECT, i + 1);
fragment.setArguments(args);
return fragment;
}
@Override
public int getCount() {
return 3;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0: return "A";
case 1: return "B";
case 2: return "C";
}
return "Tab " + (position + 1);
}
}
And this is the fragment:
public class DemoObjectFragment extends Fragment {
public static final String ARG_OBJECT = "object";
int mNum;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// The last two arguments ensure LayoutParams are inflated
// properly.
View rootView = inflater.inflate(R.layout.activity_page, container, false);
//((TextView) rootView.findViewById(android.R.id.text1)).setText(
// Integer.toString(args.getInt(ARG_OBJECT)));
return rootView;
}
/**
* When creating, retrieve this instance's number from its arguments.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mNum = getArguments() != null ? getArguments().getInt("num") : 1;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
}
Update: Here is the activity_page.xml
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<LinearLayout
android:id="@+id/panel_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:background="#fffaffff"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".GuessActivity">
<TextView
android:id="@+id/text1"
android:text="@string/lorem_ipsum"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/button_validate"
android:layout_width="wrap_content"
android:layout_height="@dimen/guess_height"
android:layout_alignParentRight="true"
android:onClick="validateGuess"
android:text="@string/button_validate" />
<TextView
android:id="@+id/text2"
android:text="@string/guess_success"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#008000"
android:visibility="gone"/>
</LinearLayout>
</FrameLayout>