2013-07-28 3 views
2

Я пытаюсь научиться использовать Фрагменты в android. Я создаю отдельные классы и макеты. У меня возникли проблемы с пониманием того, как я должен связывать их все. Что именно происходит в моем основном классе? Может кто-нибудь, пожалуйста, продемонстрировать, как использовать фрагменты очень простым способом?Как правильно использовать фрагменты

+0

ли Вы случайно посмотреть на официальной документации разработчика? http://developer.android.com/guide/components/fragments.html Еще одна вещь может заключаться в том, чтобы создать проект от мастера, где реализовано полнофункциональное приложение с функцией «Фрагменты». – Darwind

+0

Неясный вопрос. Вы должны научиться самостоятельно и задавать конкретные вопросы, которые еще не заданы. – princepiero

ответ

2

В вашем основном классе вы производите один или несколько фрагментов ... Пока вы производите каждый фрагмент, он очень похож на Activity, но имеет свой собственный жизненный цикл (google it).

вот пример на фрагменте:

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; 
    } 
} 

в OnCreateView() метод вы делаете то, что вы обычно делаете с деятельностью. Мой главный класс содержит разделы PagerAdapter, который переключается между фрагментами (пейджер, как в примерах API) создайте 2 или 3 фрагмента и просто попробуйте его ... Я не нашел на нем хороших примеров, поэтому я просто попробовал выше ,

0

Основной, как это:

Создать одну активность и 2 фрагментов.

Если что-то происходит в FragmantA, то что-то должно измениться в фрагменте справа. Таким образом, активность связывает фрагменты A и B вместе. Что вам нужно для этого: интерфейс.

Создайте интерфейс с помощью метода, который принимает правильные свойства (не забудьте тип данных). Теперь вы можете реализовать интерфейс в своей деятельности.

После этого вы должны инициализировать интерфейс в FragmentA в методе onActivityCreated. Выполните изменения и отправьте данные в интерфейсный метод в Activity. Создайте ссылку на FragmentB с помощью FragmentManager. Теперь вы можете отправить данные/изменения в FragmentB.

Надеюсь, вы это поняли;). ура

3

, пожалуйста, прочитайте this сначала как, я думаю, у меня есть самые основы. Ниже приведен пример:

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> 

0

Я сделал образец проекта, который не делает использование ViewPager и все странные вещи, только связь между Activity и Fragment здесь на Stack Overflow и тот же вещь на Code Review, чтобы продемонстрировать это, щелкните по ссылкам, чтобы увидеть проект.

1

То же, что LetsAmrIt публикуемую, просто еще один пример:

Основная деятельность:

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; 
    } 

} 

Список фрагментов:

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(); 
    } 
} 

Посмотреть Фра gment

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; 
    } 
} 

фильм:

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; 
    } 
} 

Добавить фильм:

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); 
    } 
} 
Смежные вопросы