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 }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。