http://android-developers.blogspot.com/2011/02/android-30-fragments-api.html
上記サイトが一番ためになるようだ。
ただ、Layoutをxmlでやったり、Java内で動的にやったり、
なんだか関係がよくわからない、というレベルの私なので、
下記を参考にした。
おそらく一番わかり易い記事だ。
[PROCESS]
[#1 Make Project]
eclipseで新規作成メニューからAndroidプロジェクトを選択。
あなたの好きなプロジェクト名を作成する。
[#2 Configure main.xml]
さっき作ったプロジェクトで最初に動く画面を作るmain.xml。
どこにあるかは下記図を参照。これをダブルクリック。
これを下記に上書き。
上書き編集画面はこんな感じ。
この"com.bambooflower.fragmenttest"はあなたの決めたプロジェクト名に変更。
[#3 Add codes to MainActivity]
こんどは、プロジェクトを仕切るActivityを書き換え。
プロジェクト名+Activityのファイルをダブルクリック。
クラス内にコードを追加。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ListView l = (ListView) findViewById(R.id.number_list);
ArrayAdapter numbers = new ArrayAdapter(getApplicationContext(),
android.R.layout.simple_list_item_1,
new String [] {
"one", "two", "three", "four", "five", "six"
});
l.setAdapter(numbers);
l.setOnItemClickListener(this);
}
/**
* Add a Fragment to our stack with n Androids in it
*/
private void stackAFragment(int nAndroids) {
Fragment f = new MyFragment(nAndroids);
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.the_frag, f);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
}
/**
* Called when a number gets clicked
*/
public void onItemClick(AdapterView parent, View view, int position, long id) {
stackAFragment(position + 1);
}
書き換え後はこんな感じ。
eclipse上で赤線が出てたら、依存関係が解消されていないので、
マウスオーバー(赤線の上にカーソルを合わせる)してサジェスト(カーソルの下に出てくる助言)野中の"import ****"を選択する。
[#4 Add Fragment Class]
プロジェクト名を右クリックして、クラスを追加する。
クラス名は、またあなたがつけてください。
クラス作成後のソースに下記を追加。
private int nAndroids;
public MyFragment() {
}
/**
* Constructor for being created explicitly
*/
public MyFragment(int nAndroids) {
this.nAndroids = nAndroids;
}
/**
* If we are being created with saved state, restore our state
*/
@Override
public void onCreate(Bundle saved) {
super.onCreate(saved);
if (null != saved) {
nAndroids = saved.getInt("nAndroids");
}
}
/**
* Save the number of Androids to be displayed
*/
@Override
public void onSaveInstanceState(Bundle toSave) {
toSave.putInt("nAndroids", nAndroids);
}
/**
* Make a grid and fill it with n Androids
*/
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle saved) {
int n;
Context c = getActivity().getApplicationContext();
LinearLayout l = new LinearLayout(c);
for (n = 0; n < nAndroids; n++) {
ImageView i = new ImageView(c);
i.setImageResource(R.drawable.gallery_thumb);
l.addView(i);
}
return l;
}
追加後はこんな感じ。
最後に、main.xmlにもどって、"MyFragment"と適当に私が入れていた名前を、あなたのクラス名にしてください。
[#5 build]
ビルドしてみましょう。
Android 4.0.3の横長画面エミュレータではこんな感じ。
Galaxy Nexusではこんな画面。なんか意図したものと違う・・・。
私が作りたいのは、Galaxy Nexusでは横に並ぶのではなく、画面遷移・・
そうかListViewもFragmentにしないといけないのかな。
次回はちゃんと画面遷移ができるようにするぞー!