質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

1回答

2776閲覧

FragmentからFragmentへ"startActivityForResult"的なことを実現する方法

js.making

総合スコア23

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2015/02/11 16:05

編集2015/03/06 13:16

androidアプリ開発をしています。

通常のActivityからのstartActivityForResultは
経験があります。

今回は、FragmentからActivity(Fragmentでも可)で別画面を立ち上げ、
その画面のListViewで選んだItemを、元のFragmentのEditTextに反映させたいです。

ネット検索すると
fragmentから直接同じことができる、と記載があったり、
Activityを通して行う
などの記事がありましたが、どれもうまく行きません。

今回はActivityを通してのプログラムですが、
可能ならFragment→Fragmentの方法でも構わないなので、
できるだけシンプルに実装したいです。

構成
MainActivity (FragmentとしてRootMenuを呼び出す)

RootMenu (ViewPagerを実装 横にフリックする3つのFragmentを持っている)
ChildFragment (RootMenuの中の1つ目のFragment)

ChildChildListView (ChildFragmentからstartActivityForResultのような別画面を出し、そこからChildFragmentのEditTextに文字列を返す)

※最後のChildChildFragmentはRootMenuの3つのFragmentとは別です。
ListViewはActivityでなくてもFragmentで出してもOK。

やりたいことはChildFragmentのEditTextに
ChildChildListViewの選択したItemを返したいです。

このプログラムを起動するとListViewまでは行けるのですが、
Itemを選択してもEditTextに帰ってきません。
空白のままです。

どうか解決方法があれば、教えてください。
宜しくお願いします。

lang

1 2public class ChildFragment extends Fragment{ 3 4 EditText edit1; 5 EditText edit2 6 Button choice_btn; 7 Button search_btn; 8 9 10 private MainActivity parent; 11 12 @Override 13 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 14 super.onCreate(savedInstanceState); 15 16 17 View v = inflater.inflate(R.layout.child_activity, container, false); 18 19 edit1 = (EditText)v.findViewById(R.id.editText1); 20 edit2 = (EditText)v.findViewById(R.id.editText2); 21 choice_btn = (Button)v.findViewById(R.id.btn1); 22 search_btn = (Button)v.findViewById(R.id.btn2); 23 24 //検索ボタンのクリック動作 25 search_btn.setOnClickListener(new OnClickListener(){ 26 27 @Override 28 public void onClick(View v) { 29 // TODO Auto-generated method stub 30 //EditTextのテキストを取得 31 CharSequence str1 = edit1.getText(); 32 CharSequence str2 = edit2.getText(); 33 34 //editテキストを取得して利用する動作 ー省略ー 35 } 36 } 37 }); 38 choice_btn.setOnClickListener(new View.OnClickListener(){ 39 40 @Override 41 public void onClick(View v) { 42 // TODO Auto-generated method stub 43 parent.move(); 44 } 45 }); 46 return v; 47 } 48 49 50 51 @Override 52 public void onAttach(Activity activity){ 53 parent = (MainActivity)activity; 54 super.onAttach(activity); 55 try{ 56 }catch(ClassCastException e){ 57 e.printStackTrace(); 58 } 59 } 60 61 62 63}

MainActivity

lang

1public class MainActivity extends FragmentActivity { 2 3 private RosenSectionFragment child; 4 5 @Override 6 protected void onCreate(Bundle savedInstanceState) { 7 super.onCreate(savedInstanceState); 8 9 FragmentManager fm = getSupportFragmentManager(); 10 FragmentTransaction ft = fm.beginTransaction(); 11 ft.replace(R.id.root, new RootMenu(),"Root"); 12 ft.commit(); 13 setContentView(R.layout.activity_main); 14 } 15 16 void move(){ 17 Intent intent = new Intent(this, ChildChildListView.class); 18 startActivityForResult(intent, 0); 19 } 20 21 void move2(){ 22 Intent intent = new Intent(this, ChildChildListView.class); 23 startActivityForResult(intent, 1); 24 } 25 26 @Override 27 public void onActivityResult(int requestCode, int resultCode, Intent intent){ 28 super.onActivityResult(requestCode, resultCode, intent); 29 if(requestCode == 0){ 30 String str = intent.getStringExtra("value1"); 31 child.edit1.setText(str); 32 }else if(requestCode == 1){ 33 String str = intent.getStringExtra("value1"); 34 child.edit2.setText(str); 35 } 36 }

ListViewActivity

lang

1public class ChildChildListVIew extends Activity{ 2 3 EditText Edit; 4 Button hozon_btn; 5 ListView listView; 6 ArrayAdapter<String> adapter; 7 8 9 private MainActivity parent; 10 11 @Override 12 protected void onCreate(Bundle savedInstanceState){ 13 super.onCreate(savedInstanceState); 14 setContentView(R.layout.child_list); 15 16//途中省略 17 18 19 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 20 21 @Override 22 public void onItemClick(AdapterView<?> parent, View view, 23 int position, long id) { 24 // TODO Auto-generated method stub 25 listView = (ListView)parent; 26 //タップされたアイテムを取得 27 String item = (String)ro_listView.getItemAtPosition(position); 28 Intent intent = getIntent(); 29 intent.putExtra("value1", item); 30 setResult(RESULT_OK, intent); 31 finish(); 32 } 33 }); 34 35 36}

RootMenu

lang

1public class RootMenu extends Fragment{ 2 3 SectionsPagerAdapter mSectionPagerAdapter; 4 ViewPager mViewPager; 5 6 @Override 7 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 8 View rootView = inflater.inflate(R.layout.menu, container, false); 9 10 mSectionPagerAdapter = new SectionsPagerAdapter(getChildFragmentManager()); 11 mViewPager = (ViewPager)rootView.findViewById(R.id.pager); 12 mViewPager.setAdapter(mSectionPagerAdapter); 13 14 /*PageTabカスタム*/ 15 PagerTabStrip strip = (PagerTabStrip)rootView.findViewById(R.id.pager_title_strip); 16 strip.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16); 17 strip.setTextSpacing(50); 18 strip.setNonPrimaryAlpha(0.3f); 19 20 return rootView; 21 22 } 23 24 public class SectionsPagerAdapter extends FragmentPagerAdapter{ 25 26 public SectionsPagerAdapter(FragmentManager fm){super(fm);} 27 28 @Override 29 public Fragment getItem(int position){ 30 Fragment fragment = null; 31 switch(position){ 32 case 0: fragment = new ChildFragment(); break; 33 case 1: fragment = new Child2Fragment(); break; 34 case 2: fragment = new Child3Fragment(); break; 35 } 36 return fragment; 37 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

MainActivity内のonActivityResultから、直接EditTextをfindViewByIdで取得することで解決しました。

lang

1@Override 2 public void onActivityResult(int requestCode, int resultCode, Intent intent){ 3 super.onActivityResult(requestCode, resultCode, intent); 4 if(requestCode == 0){ 5 //下記1行追加 6 EditText edit1 = (EditText)findViewById(R.id.editText1); 7 //ここまで 8 String str = intent.getStringExtra("value1"); 9 child.edit1.setText(str); 10 }else if(requestCode == 1){ 11 //下記1行追加 12 EditText edit2 = (EditText)findViewById(R.id.editText2); 13 //ここまで 14 String str = intent.getStringExtra("value1"); 15 child.edit2.setText(str); 16 } 17 }

投稿2015/03/06 13:22

js.making

総合スコア23

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問