Fragment&Fragment間の通信実装
4080 ワード
FragmentはActivityに関するコントロールです.Fragmentは常にActivityに埋め込まれている必要があります.Activityのライフサイクルはそれに直接影響します.例えばActivity Pausedの場合、FragmentもPausedです.しかし、Activity resumeの場合、Fragmentは追加、削除などの操作を独立して行うことができます.
FragmentのライフサイクルはActivityとよく似ています.次の図はGoogleドキュメントからコピーしたActivityとFragmentのライフサイクルの対比です.Fragmentを作成する場合、実装する必要があるonCreate()、onCreateView()、onPause()の3つの方法があります.
インターネット上ではPADのようなUI実装が多く見られますが、左側にリストがあり、右側に関連コンテンツが表示されます.ListFragmentを使用しています.単純な2つのFragmentがどのように通信しているのか知りたいだけです.私は最も簡単なDEMOを書きました.Activityで、中には2つのfragmentがあります.左fragmentのbuttonをクリックすると、右fragmentに単語が表示されます.とても汗をかいたのは、これは長い間考えていました.菜鳥ですね.最初からやりましょう.Fragment間では直接通信することはできず,Activityとの間接通信で実現しなければならない.
最終的にはこうなりました
Googleドキュメントの関連コンテンツ.
http://developer.android.com/guide/components/fragments.html
http://developer.android.com/training/basics/fragments/index.html
FragmentのライフサイクルはActivityとよく似ています.次の図はGoogleドキュメントからコピーしたActivityとFragmentのライフサイクルの対比です.Fragmentを作成する場合、実装する必要があるonCreate()、onCreateView()、onPause()の3つの方法があります.
インターネット上ではPADのようなUI実装が多く見られますが、左側にリストがあり、右側に関連コンテンツが表示されます.ListFragmentを使用しています.単純な2つのFragmentがどのように通信しているのか知りたいだけです.私は最も簡単なDEMOを書きました.Activityで、中には2つのfragmentがあります.左fragmentのbuttonをクリックすると、右fragmentに単語が表示されます.とても汗をかいたのは、これは長い間考えていました.菜鳥ですね.最初からやりましょう.Fragment間では直接通信することはできず,Activityとの間接通信で実現しなければならない.
import android.app.Activity;
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.TextView;
public class Book extends Activity implements OnArticleSelectedListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.book);
}
@Override
public void onArticleSelected(int id) {
switch (id) {
case R.id.button1 :
showDetail();
break;
.....
default:
break;
}
}
private void showDetail() {
DetailFragment df = (DetailFragment)getFragmentManager().
findFragmentById(R.id.detail_fragment);
df.updateDetail();
}
public static class ArticleFragment extends Fragment {
OnArticleSelectedListener mListener;
// Container Activity must implement this interface
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mListener = (OnArticleSelectedListener)activity;
} catch (ClassCastException e) {
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.article_view, container, false);
v.findViewById(R.id.button1).setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.onArticleSelected(R.id.button1);
}
});
return v;
}
}
public static class DetailFragment extends Fragment {
public View mView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mView = inflater.inflate(R.layout.detail_view, container, false);
return mView;
}
public void updateDetail() {
TextView textView;
textView = (TextView)mView.findViewById(R.id.text_1);
textView.setText("Emily");
}
}
}
public interface OnArticleSelectedListener {
public void onArticleSelected(int id);
}
最終的にはこうなりました
Googleドキュメントの関連コンテンツ.
http://developer.android.com/guide/components/fragments.html
http://developer.android.com/training/basics/fragments/index.html