Kirit Thadaka
Kirit Thadaka

Reputation: 87

How do I use fragments properly

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

Answers (7)

Lucien Theron
Lucien Theron

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

EpicPandaForce
EpicPandaForce

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

Amrmsmb
Amrmsmb

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

Foo
Foo

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

Oliver.Oakley
Oliver.Oakley

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

Quan
Quan

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

Geka P
Geka P

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

Related Questions