サンプル概要
Activityは二つのFragment
1. BookListFragment - 本リストを表示する
2. BookDetailFragment - 本の詳細を表示する
を含み、本をクリックした際にその詳細が表示される。
作成手順
① BookContent(Bookモデル含む)を作成する
② BookDetailFragmentを作成する
③ BookListFragmentを作成する
④ MainActivityを作成する
サンプル
① BookContent(Bookモデル含む)を作成する
BookContent.java |
package com.example.liguofeng.fragmentsample.model;
import java.util.ArrayList; import java.util.List;
public class BookContent { public static List<Book> bookList = new ArrayList<Book>(){ {add(new Book(0, "java", "java is a programming laguage. made by SunMicrosoft."));} {add(new Book(1, "android", "android is a flatform. made by Google."));} {add(new Book(2, "c#", "c# is a programming laguage. made by MS."));} {add(new Book(3, "spring", "spring is a framework fro wepapp."));} };
// Bookクラス public static class Book { public Integer id; public String title; public String desc;
public Book(Integer id, String title, String desc) { this.id = id; this.title = title; this.desc = desc; }
@Override public String toString() { return title; } } }
|
② BookDetailFragmentを作成する
BookDetailFragment.java |
package com.example.liguofeng.fragmentsample.fragment;
import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView;
import com.example.liguofeng.fragmentsample.R; import com.example.liguofeng.fragmentsample.model.BookContent;
public class BookDetailFragment extends Fragment { public static final String ITEM_ID = "item_id";
BookContent.Book book; // 表示BOOK @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
if (getArguments().containsKey(ITEM_ID)) { // Bookを取得する book = BookContent.bookList.get(getArguments().getInt(ITEM_ID)); } }
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// layoutファイルロード View rootView = inflater.inflate(R.layout.fragment_book_detail, container, false);
if (book != null) { // タイトル表示 ((TextView) rootView.findViewById(R.id.book_title)).setText(book.title); // 説明表示 ((TextView) rootView.findViewById(R.id.book_desc)).setText(book.desc); }
return rootView; // View返却 } }
|
③ BookListFragmentを作成する
BookListFragment.java |
package com.example.liguofeng.fragmentsample.fragment;
import android.app.Activity; import android.app.ListFragment;
import android.os.Bundle;
import android.view.View; import android.widget.ArrayAdapter; import android.widget.ListView;
import com.example.liguofeng.fragmentsample.model.BookContent;
// ListFragmentの継承する場合、onCreateVieメソッドをオーバライドする必要がない public class BookListFragment extends ListFragment {
Callback mCallback; // Activityと通信用Callback public interface Callback { public void onItemSelected(Integer id); }
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setListAdapter(new ArrayAdapter<BookContent.Book>(getActivity(), android.R.layout.simple_list_item_activated_1, // ※ 対象オブジェクトのtoString()を表示する!!!ハマってた!!! android.R.id.text1, BookContent.bookList)); }
// Deprecatedされているが、理由か下記参照 // http://qiita.com/syarihu/items/a8bb189d33585238c287 @Override public void onAttach(Activity activity) { super.onAttach(activity);
if (!(activity instanceof Callback)) { // ActivityがCallbacksを実装してない場合、サンプルなの無視 }
mCallback = (Callback) activity; }
@Override public void onDetach() { super.onDetach(); mCallback = null; } @Override public void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); mCallback.onItemSelected(BookContent.bookList.get(position).id); }
public void setActivityOnItemClick(boolean activateOnItemClick) { getListView().setChoiceMode( activateOnItemClick ? ListView.CHOICE_MODE_SINGLE : ListView.CHOICE_MODE_NONE ); } }
|
④ MainActivityを作成する
activity_book_twopane.xml |
|
MainActivity.java |
package com.example.liguofeng.fragmentsample;
import android.app.Activity; import android.app.FragmentManager; import android.support.annotation.BoolRes; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.Toast;
import com.example.liguofeng.fragmentsample.fragment.BookDetailFragment; import com.example.liguofeng.fragmentsample.fragment.BookListFragment;
public class MainActivity extends Activity implements BookListFragment.Callback{
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_book_twopane); } // callbakc実装 @Override public void onItemSelected(Integer id) {
// パラメタ生成 Bundle data = new Bundle(); data.putInt(BookDetailFragment.ITEM_ID, id); // Fragment生成 BookDetailFragment fragment = new BookDetailFragment(); // パラメータ設定 fragment.setArguments(data); // Fragmentを表示 getFragmentManager() .beginTransaction() .replace(R.id.book_detail_container, fragment) .commit(); } }
|