Reputation: 87
I'm trying to learn how to use Fragments in android. I create the separate classes and layouts. I'm having trouble understanding how I'm supposed to link them all. What exactly goes in my Main class? Could someone please demonstrate exactly how to use fragments in a very basic way?
Upvotes: 2
Views: 1663
Reputation: 413
Same as what LetsAmrIt posted, just another example:
Main Activity:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Comparator;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.PixelFormat;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
public class MainActivity extends Activity implements MyListFragment.MovieSelectedListener
{
Movie movie;
ListView movieList;
@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getWindow().setFormat(PixelFormat.RGBA_8888);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER);
setContentView(R.layout.activity_main);
try
{
FileInputStream fis = openFileInput("movies");
if (fis != null)
{
ObjectInputStream in = new ObjectInputStream(fis);
movie = (Movie) in.readObject();
in.close();
Toast.makeText(this, "Movies loaded.", Toast.LENGTH_SHORT).show();
}
}
catch (Exception e)
{
Toast.makeText(this, "No movies to load.", Toast.LENGTH_SHORT).show();
}
if (movie == null)
{
movie = new Movie();
movie.addMovie("Harry Potter", "12 January", "Thriller", 4, "Some people", "Bad", "Someone", "Walmer Park");
}
loadFragments();
}
public void loadFragments()
{
if ((getResources().getConfiguration().screenLayout &Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE)
{
Log.d("Screen Size: ", "LARGE");
// obtain the fragment manager
FragmentManager fragmentManager = getFragmentManager();
// determine if the fragment has already been loaded (may have happened)
Fragment listfrag = fragmentManager.findFragmentById(R.id.fragment_container);
// place fragment into container if not already there
if (listfrag == null) {
// start a transaction that will handle the swapping in/out
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction();
// multiple additions to the transaction can be done so that they
// changes will be done simultaneously
MyListFragment fragment1 = new MyListFragment();
fragmentTransaction.add(R.id.fragment_container, fragment1);
ViewFragment fragment2 = new ViewFragment();
fragmentTransaction.add(R.id.details_container, fragment2);
Bundle args = new Bundle();
args.putSerializable("Movie", movie);
fragment1.setArguments(args);
// commit the changes, i.e. do it!
fragmentTransaction.commit();
}
}
else if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_NORMAL) {
Log.d("Screen Size: ", "NORMAL");
// obtain the fragment manager
FragmentManager fragmentManager = getFragmentManager();
// determine if the fragment has already been loaded (may have happened)
Fragment listfrag = fragmentManager.findFragmentById(R.id.fragment_container);
// place fragment into container if not already there
if (listfrag == null) {
// start a transaction that will handle the swapping in/out
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction();
// multiple additions to the transaction can be done so that they
// changes will be done simultaneously
MyListFragment fragment = new MyListFragment();
fragmentTransaction.add(R.id.fragment_container, fragment);
Bundle args = new Bundle();
args.putSerializable("Movie", movie);
fragment.setArguments(args);
// commit the changes, i.e. do it!
fragmentTransaction.commit();
}
}
else if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_SMALL) {
Log.d("Screen Size: ", "SMALL");
}
else if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_XLARGE) {
Log.d("Screen Size: ", "XLARGE");
Log.d("Screen Size: ", "LARGE");
// obtain the fragment manager
FragmentManager fragmentManager = getFragmentManager();
// determine if the fragment has already been loaded (may have happened)
Fragment listfrag = fragmentManager.findFragmentById(R.id.fragment_container);
// place fragment into container if not already there
if (listfrag == null) {
// start a transaction that will handle the swapping in/out
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction();
// multiple additions to the transaction can be done so that they
// changes will be done simultaneously
MyListFragment fragment1 = new MyListFragment();
fragmentTransaction.add(R.id.fragment_container, fragment1);
ViewFragment fragment2 = new ViewFragment();
fragmentTransaction.add(R.id.details_container, fragment2);
Bundle args = new Bundle();
args.putSerializable("Movie", movie);
fragment1.setArguments(args);
// commit the changes, i.e. do it!
fragmentTransaction.commit();
}
}
else {
Log.d("Screen Size: ","UNKNOWN_CATEGORY_SCREEN_SIZE");
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu items for use in the action bar
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
return true;
}
public void pushFragment(Movie curMovie) {
// obtain the fragment manager
FragmentManager fragmentManager = getFragmentManager();
// start a transaction that will handle the swapping in/out
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction();
// add new fragment, BUT remember previous one, so that BACK button
// returns to it
ViewFragment fragment = new ViewFragment();
fragmentTransaction.replace(R.id.fragment_container, fragment);
fragmentTransaction.addToBackStack("view");
Bundle args = new Bundle();
args.putSerializable("curMovie", curMovie);
fragment.setArguments(args);
// commit the changes, i.e. do it!
fragmentTransaction.commit();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
MyListFragment fragment = (MyListFragment) getFragmentManager().findFragmentById(R.id.fragment_container);
switch(item.getItemId())
{
case R.id.action_about:
About();
return true;
case R.id.action_add:
addMovie();
return true;
case R.id.sort_Title:
fragment.sortTitle();
return true;
case R.id.sort_Date:
fragment.sortDateViewed();
return true;
case R.id.sort_Rating:
fragment.sortRating();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
if (requestCode == 1)
{
if (resultCode == RESULT_OK)
{
String title = data.getStringExtra("titleText");
String genre = data.getStringExtra("genreText");
String actors = data.getStringExtra("actorsText");
int rating = data.getIntExtra("ratingValue", 0);
String date = data.getStringExtra("dateWatched");
String watchedWith = data.getStringExtra("watchedWithText");
String watchedAt = data.getStringExtra("watchedAtText");
String comment = data.getStringExtra("commentText");
movie.addMovie(title, date, genre, rating, actors, comment, watchedWith, watchedAt);
write();
}
}
super.onActivityResult(requestCode, resultCode, data);
}
public void write()
{
try
{
FileOutputStream fos = openFileOutput("movies", Context.MODE_PRIVATE);
ObjectOutputStream out = new ObjectOutputStream(fos);
out.writeObject(movie);
fos.close();
Toast.makeText(this, "Movies saved.", Toast.LENGTH_SHORT).show();
}
catch (Exception e)
{
Toast.makeText(this, "Movies could not be saved.", Toast.LENGTH_SHORT).show();
}
}
public void addMovie()
{
Intent intentAdd = new Intent(MainActivity.this, AddMovie.class);
startActivityForResult(intentAdd, 1);
}
public void About()
{
Intent intentAbout = new Intent(this, About.class);
startActivity(intentAbout);
}
public void addDetails(Movie curMovie)
{
// obtain the fragment manager
FragmentManager fragmentManager = getFragmentManager();
// start a transaction that will handle the swapping in/out
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction();
ViewFragment fragment = new ViewFragment();
// REPLACE the existing fragment with another one
fragmentTransaction.replace(R.id.details_container, fragment);
Bundle args = new Bundle();
args.putSerializable("curMovie", curMovie);
fragment.setArguments(args);
// commit the changes, i.e. do it!
fragmentTransaction.commit();
}
@Override
public void onMovieSelected(String movieName) {
// TODO Auto-generated method stub
if ((getResources().getConfiguration().screenLayout &Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE)
{
Log.d("Screen Size: ", "LARGE");
Movie current = movie.getMovie(movieName);
Context context = getApplicationContext();
CharSequence text = current.MovieTitle;
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
addDetails(current);
}
else if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_NORMAL) {
Log.d("Screen Size: ", "NORMAL");
Movie current = movie.getMovie(movieName);
Context context = getApplicationContext();
CharSequence text = current.MovieTitle;
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
pushFragment(current);
}
else if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_SMALL) {
Log.d("Screen Size: ", "SMALL");
}
else if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_XLARGE) {
Log.d("Screen Size: ", "XLARGE");
}
else {
Log.d("Screen Size: ","UNKNOWN_CATEGORY_SCREEN_SIZE");
}
}
@Override
public void onDeleteSelected(String movie, MovieAdapter adapter) {
// TODO Auto-generated method stub
this.movie.deleteMovie(movie);
adapter.notifyDataSetChanged();
write();
}
}
Movie Adapter:
import java.util.List;
import android.content.Context;
import android.view.*;
import android.widget.ArrayAdapter;
import android.widget.RatingBar;
import android.widget.TextView;
public class MovieAdapter extends ArrayAdapter<Movie> {
private Context context;
private List<Movie> movies;
public MovieAdapter(Context context, List<Movie> movies)
{
super(context, R.layout.movie_layout, movies);
this.context = context;
this.movies = movies;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View movieView = convertView;
if(movieView == null)
{
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
movieView = inflater.inflate(R.layout.movie_layout, parent, false);
}
movieView.setTag(movies.get(position));
TextView txtTitle = (TextView) movieView.findViewById(R.id.txtTitle);
TextView txtDate = (TextView) movieView.findViewById(R.id.txtDate);
RatingBar ratingBar = (RatingBar) movieView.findViewById(R.id.ratingBar);
txtTitle.setText(movies.get(position).MovieTitle);
txtDate.setText("Date Viewed: "+movies.get(position).dateViewed);
ratingBar.setIsIndicator(true);
ratingBar.setNumStars(movies.get(position).rating);
ratingBar.setRating(movies.get(position).rating);
return movieView;
}
}
List Fragment:
import java.util.Comparator;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Fragment;
import android.content.DialogInterface;
import android.util.Log;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.TextView;
public class MyListFragment extends Fragment{
Movie movie;
MovieAdapter adapter;
MovieSelectedListener callBack;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.list_fragment, container, false);
ListView movieList = (ListView)view.findViewById(R.id.movieList);
movieList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
TextView movie = (TextView)view.findViewById(R.id.txtTitle);
String title = movie.getText().toString();
callBack.onMovieSelected(title);
}
});
if (getArguments() != null)
movie = (Movie)getArguments().getSerializable("Movie");
Log.v("PASSED","Got here");
adapter = new MovieAdapter(getActivity(), movie.movies);
movieList.setAdapter(adapter);
movieList.setLongClickable(true);
movieList.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, final View view,
int position, long id) {
// TODO Auto-generated method stub
AlertDialog.Builder dialog = new AlertDialog.Builder(getActivity());
dialog.setMessage("Are you sure you want to delete this movie?");
dialog.setTitle("Alert Message");
dialog.setCancelable(false);
dialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
TextView movie = (TextView)view.findViewById(R.id.txtTitle);
String title = movie.getText().toString();
callBack.onDeleteSelected(title, adapter);
}
});
dialog.setNegativeButton("No",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
});
dialog.show();
return false;
}
});
return view;
}
public interface MovieSelectedListener
{
public void onMovieSelected(String movie);
public void onDeleteSelected(String movie, MovieAdapter adapter);
}
@Override
public void onAttach(Activity activity)
{
super.onAttach(activity);;
try
{
callBack = (MovieSelectedListener) activity;
}
catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement MovieSelectedListener");
}
}
public void sortTitle()
{
adapter.sort(new Comparator<Movie>() {
public int compare(Movie lhs, Movie rhs) {
return lhs.MovieTitle.compareTo(rhs.MovieTitle);
}
});
adapter.notifyDataSetChanged();
}
public void sortDateViewed()
{
adapter.sort(new Comparator<Movie>() {
public int compare(Movie lhs, Movie rhs) {
return lhs.dateViewed.compareTo(rhs.dateViewed);
}
});
adapter.notifyDataSetChanged();
}
public void sortRating()
{
adapter.sort(new Comparator<Movie>() {
public int compare(Movie lhs, Movie rhs) {
return ((Integer)lhs.rating).compareTo(rhs.rating);
}
});
adapter.notifyDataSetChanged();
}
}
View Fragment
import android.app.Fragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RatingBar;
import android.widget.TextView;
public class ViewFragment extends Fragment {
Movie curMovie = new Movie("Empty", "Empty", "Empty", 5, "Empty", "Empty", "Empty", "Empty");
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.view_fragment, container, false);
if (getArguments() != null)
curMovie = (Movie)getArguments().getSerializable("curMovie");
TextView titleTxt = (TextView)view.findViewById(R.id.titleTxt);
titleTxt.setText(curMovie.MovieTitle);
TextView genreTxt = (TextView)view.findViewById(R.id.genreTxt);
genreTxt.setText(curMovie.genre);
TextView actorsTxt = (TextView)view.findViewById(R.id.actorsTxt);
actorsTxt.setText(curMovie.actors);
RatingBar ratingRes = (RatingBar)view.findViewById(R.id.ratingRes);
ratingRes.setIsIndicator(true);
ratingRes.setNumStars(curMovie.rating);
ratingRes.setRating(curMovie.rating);
TextView dateWatchedTxt = (TextView)view.findViewById(R.id.dateWatchedTxt);
dateWatchedTxt.setText(curMovie.dateViewed);
TextView watchedWithTxt = (TextView)view.findViewById(R.id.watchedWithTxt);
watchedWithTxt.setText(curMovie.viewedWith);
TextView watchedAtTxt = (TextView)view.findViewById(R.id.watchedAtTxt);
watchedAtTxt.setText(curMovie.viewedWhere);
TextView commentTxt = (TextView)view.findViewById(R.id.commentTxt);
commentTxt.setText(curMovie.comments);
// Inflate the layout for this fragment
return view;
}
}
Movie:
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
public class Movie implements Serializable
{
String MovieTitle, dateViewed, actors, genre, comments, viewedWith, viewedWhere;
int rating;
public Movie(String MovieTitle, String dateViewed, String genre, int rating, String actors, String comments, String viewedWith, String viewedWhere)
{
this.MovieTitle = MovieTitle;
this.dateViewed = dateViewed;
this.genre = genre;
this.rating = rating;
this.actors = actors;
this.comments = comments;
this.viewedWith = viewedWith;
this.viewedWhere = viewedWhere;
}
final List<Movie> movies = new ArrayList<Movie>();
public Movie(){
}
public void addMovie(String MovieTitle, String dateViewed, String genre, int rating, String actors, String comments, String viewedWith, String viewedWhere)
{
movies.add(new Movie(MovieTitle, dateViewed, genre, rating, actors, comments, viewedWith, viewedWhere));
}
public void deleteMovie(String movieTitle)
{
Movie toDelete = getMovie(movieTitle);
movies.remove(toDelete);
}
public Movie getMovie(String movie)
{
for(Movie mov:movies)
{
if(mov.MovieTitle.equals(movie))
{
return mov;
}
}
return null;
}
}
Add Movie:
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;
import android.widget.RatingBar;
import android.widget.Toast;
public class AddMovie extends Activity
{
EditText title2;
EditText genre2;
EditText actors2;
RatingBar rating2;
EditText date2;
EditText watchedWith2;
EditText watchedAt2;
EditText comment2;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_movie);
//savedInstance
title2 = (EditText)findViewById(R.id.title);
genre2 = (EditText)findViewById(R.id.genre);
actors2 = (EditText)findViewById(R.id.actors);
rating2 = (RatingBar)findViewById(R.id.rating);
date2 = (EditText)findViewById(R.id.dateWatched);
watchedWith2 = (EditText)findViewById(R.id.watchedWith);
watchedAt2 = (EditText)findViewById(R.id.watchedAt);
comment2 = (EditText)findViewById(R.id.comment);
if ((savedInstanceState != null) && (savedInstanceState.containsKey("TITLE_STATE_KEY")))
{
title2.setText(savedInstanceState.getString("TITLE_STATE_KEY"));
actors2.setText(savedInstanceState.getString("ACTORS_STATE_KEY"));
genre2.setText(savedInstanceState.getString("GENRE_STATE_KEY"));
comment2.setText(savedInstanceState.getString("GC_STATE_KEY"));
watchedWith2.setText(savedInstanceState.getString("WITH_STATE_KEY"));
watchedAt2.setText(savedInstanceState.getString("LOCATION_STATE_KEY"));
date2.setText(savedInstanceState.getString("DATE_STATE_KEY"));
rating2.setRating(savedInstanceState.getFloat("RATING_STATE_KEY"));
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.add_movie, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
switch(item.getItemId())
{
case R.id.action_settings:
return true;
case R.id.action_done:
done();
default:
return super.onOptionsItemSelected(item);
}
}
public void done()
{
EditText title = (EditText)findViewById(R.id.title);
String titleText = title.getText().toString();
EditText genre = (EditText)findViewById(R.id.genre);
String genreText = genre.getText().toString();
EditText actors = (EditText)findViewById(R.id.actors);
String actorsText = actors.getText().toString();
RatingBar rating = (RatingBar)findViewById(R.id.rating);
int ratingValue = Math.round(rating.getRating());
EditText date = (EditText)findViewById(R.id.dateWatched);
String dateWatched = date.getText().toString();
EditText watchedWith = (EditText)findViewById(R.id.watchedWith);
String watchedWithText = watchedWith.getText().toString();
EditText watchedAt = (EditText)findViewById(R.id.watchedAt);
String watchedAtText = watchedAt.getText().toString();
EditText comment = (EditText)findViewById(R.id.comment);
String commentText = comment.getText().toString();
Intent intent = new Intent(AddMovie.this, MainActivity.class);
intent.putExtra("titleText", titleText);
intent.putExtra("genreText", genreText);
intent.putExtra("actorsText", actorsText);
intent.putExtra("ratingValue", ratingValue);
intent.putExtra("dateWatched", dateWatched);
intent.putExtra("watchedWithText", watchedWithText);
intent.putExtra("watchedAtText", watchedAtText);
intent.putExtra("commentText", commentText);
setResult(RESULT_OK, intent);
finish();
}
@Override
public void onSaveInstanceState(Bundle saveInstanceState)
{
saveInstanceState.putString("TITLE_STATE_KEY", title2.getText().toString());
saveInstanceState.putString("GENRE_STATE_KEY", genre2.getText().toString());
saveInstanceState.putString("GC_STATE_KEY", comment2.getText().toString());
saveInstanceState.putString("DATE_STATE_KEY", date2.getText().toString());
saveInstanceState.putString("ACTORS_STATE_KEY", actors2.getText().toString());
saveInstanceState.putString("WITH_STATE_KEY", watchedWith2.getText().toString());
saveInstanceState.putString("LOCATION_STATE_KEY", watchedAt2.getText().toString());
saveInstanceState.putFloat("RATING_STATE_KEY", rating2.getRating());
super.onSaveInstanceState(saveInstanceState);
}
}
Upvotes: 1
Reputation: 81588
I made a sample project that doesn't use ViewPager
and all the weird stuff, just the link between Activity
and Fragment
here on Stack Overflow and the same thing on Code Review to demonstrate it, click either links to see the project.
Upvotes: 0
Reputation: 11416
please read this first as, i think, i has the very basics. Below is an example:
MainActivity:
public class MainActivity extends Activity implements OnClickListener{
private final String TAG = "MainActivity";
private int btn00Clicks = 0;
private int btn01Clicks = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mainactivity);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Fragment mSelectedFragment = null;
switch (v.getId()) {
case R.id.btn00:
Bundle mBundle00 = new Bundle();
String clicks00 = Integer.toString(btn00Clicks);
mBundle00.putString("btn00_clicks", clicks00);
mSelectedFragment = new Fragment00();
mSelectedFragment.setArguments(mBundle00);
if (mSelectedFragment != null) {
FragmentManager mFragmentManager = getFragmentManager();
mFragmentManager.beginTransaction()
.replace(R.id.fragment00ID, mSelectedFragment).commit();
}
btn00Clicks++;
break;
case R.id.btn01:
Bundle mBundle01 = new Bundle();
String clicks01 = Integer.toString(btn01Clicks);
mBundle01.putString("btn01_clicks", clicks01);
mSelectedFragment = new Fragment01();
mSelectedFragment.setArguments(mBundle01);
if (mSelectedFragment != null) {
FragmentManager mFragmentManager = getFragmentManager();
mFragmentManager.beginTransaction()
.replace(R.id.fragment00ID, mSelectedFragment).commit();
}
btn01Clicks++;
}
}
}
Fragment00.java:
public class Fragment00 extends Fragment {
private final String TAG = "Fragment00";
TextView mTv;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View view = inflater.inflate(R.layout.fragment00, null);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
mTv = (TextView) getView().findViewById(R.id.fragment00Tv00);
if (getArguments() != null) {
String str = getArguments().getString("btn00_clicks").toString();
mTv.setText("the Button was clicked "+str+ " time(s)");
Log.i(TAG, "onActivityCreated(): "+str);
}else {
Log.i(TAG, "onActivityCreated(): getArguments() is NULL");
}
}
@Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
super.onAttach(activity);
}
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
}
}
Fragment01.java:
public class Fragment01 extends Fragment {
private static final String TAG = "Fragment01";
TextView mTv;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
return inflater.inflate(R.layout.fragment01, null);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
mTv = (TextView) getView().findViewById(R.id.fragment01Tv00);
if (getArguments() != null) {
String str = getArguments().getString("btn01_clicks").toString();
mTv.setText("the Button was clicked "+str+ " time(s)");
Log.i(TAG, "onActivityCreated(): "+str);
}else {
Log.i(TAG, "onActivityCreated(): getArguments() is NULL");
}
}
}
MainActivity_layout:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tools:context="com.example.fragments01.MainActivity"
tools:ignore="MergeRootFrame">
<RelativeLayout
android:id="@+id/mainRelativeLayout00"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="top|center_vertical">
<Button
android:id="@+id/btn00"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="fragment_one"
android:onClick="onClick"></Button>
<Button
android:id="@+id/btn01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/btn00"
android:text="Fragment two"
android:onClick="onClick"></Button>
<fragment
android:name="com.example.fragments01.Fragment00"
android:id="@+id/fragment00ID"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@+id/btn01">
</fragment>
</RelativeLayout>
Fragment00_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tools:context="com.example.fragments01.Fragment00"
tools:ignore="MergeRootFrame"
android:background="#00ffff">
<RelativeLayout
android:id="@+id/fragment00RelativeLayout00"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="top|center_vertical">
<TextView
android:id="@+id/fragment00Tv00"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</TextView>
</RelativeLayout>
Fragment01_layout.xml:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tools:context="com.example.fragments01.Fragment01"
tools:ignore="MergeRootFrame"
android:background="#ffff00">
<RelativeLayout
android:id="@+id/fragment01RelativeLayout00"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="top|center_vertical">
<TextView
android:id="@+id/fragment01Tv00"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Fragment two">
</TextView>
<Button
android:id="@+id/fragment01Btn00"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Button of fragment two"
android:layout_below="@+id/fragment01Tv00">
</Button>
</RelativeLayout>
Upvotes: 2
Reputation: 606
The basic is like this:
Create one Activity and 2 Fragments.
If something happens in FragmantA something should change in fragmentB right. So the Activity links Fragment A and B together. What do you need for that: an Interface.
So create an Interface with a method which takes the right properties (don't forget the datatype). Now you can implement the interface in your activity.
After this you should initialize the interface in FragmentA in the onActivityCreated method. Perform the changes and send the data to the interfacemethod in the Activity. Create a reference to FragmentB using the FragmentManager. Now you can send the data/changes to FragmentB.
I hope you understand this ;). cheers
Upvotes: 0
Reputation: 668
http://www.c-sharpcorner.com/UploadFile/2fd686/fragments/
Here's one good link with tabs and fragments. You can also define your fragments in your xml.
Upvotes: 1
Reputation: 23
I used this link to get started http://www.techotopia.com/index.php/Using_Fragments_in_Android_-_A_Worked_Example
This guy uses 2 different types of listeners and takes in the user input on the first fragment. The 2nd fragment outputs the data!
Goodluck!
Upvotes: -1
Reputation: 607
In your main class you produce one or more fragments... While you produce each fragment it's pretty similar to Activity,but has its own lifecircle(google it).
here's example on fragment:
public class DummySectionFragment3 extends Fragment
{
public DummySectionFragment3() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View rootView = inflater.inflate(R.layout.exercise_layout,
container, false);
return rootView;
}
}
in OnCreateView() method you do what you usually do with activity. My Main class contains SectionsPagerAdapter that switches between the fragments(A pager like in API samples) create 2 or 3 fragments and just try it... I didn't find any good example on it,so I just tried the above.
Upvotes: 2