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

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

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

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

978閲覧

Fragmentを用いたPager表示でViewに値を設定できない

i_zac8132

総合スコア16

Java

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2017/06/28 07:48

編集2017/06/28 07:52

みなさんこんにちは、
Javaを用いて趣味でProgramingをしているものです。
AndroidStudioを用いてアプリケーションを作成しています。

どうにもたち行かない現象に出会ってしまい皆様のお力をお借りしたく質問させていただきました。
どうぞお力添えよろしくお願いいたします。

問題の内容は表題のとおりです。
Fragmentの中にあるTextViewやImageViewにsetTextやsetImageResourceといったアクションをしても結果が反映されない状態となってしまいました。
問題点を指摘いただければと思います。以下詳細を記述させていただきます。

Activityの中にPagerを入れ、mFragmentA, mFragmentBの2つをTabViewのように表示することを目標に、以下の4つのクラスを作成いたしました。
・mActivity (extends AppCompatActivity implements OnFragmentInteractionListener)
・mFragmentA (extends Fragment)
・mFragmentB (extends Fragment)
・mFragmentStatePagerAdapter (extends FragmentStatePagerAdapter)

コードの内容は下記のとおりです。
なお頭にあります宣言などは省略させていただいています。

###mActivity

Java

1 2public class mActivity extends AppCompatActivity implements mFragment1.OnFragmentInteractionListener, mFragment2.OnFragmentInteractionListener { 3 4 ViewPager viewPager; 5 @Override 6 protected void onCreate(Bundle savedInstanceState) { 7 super.onCreate(savedInstanceState); 8 if (savedInstanceState != null) { 9 return; 10 } 11 FragmentManager fm = getSupportFragmentManager(); 12 setContentView(R.layout.activity_m); 13 14 Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 15 setSupportActionBar(toolbar); 16 viewPager = (ViewPager)findViewById(R.id.pager); 17 mFragmentStatePagerAdapter adapter = new mFragmentStatePagerAdapter(fm); 18 viewPager.setAdapter(adapter); 19 } 20 21 @Override 22 public void onFragmentInteraction(Uri uri) { 23 } 24 25} 26 27

###mFragmentA(mFragmentBも同様)

Java

1 2public class mFragmentA extends Fragment { 3 4private OnFragmentInteractionListener mListener; 5private static final String ARG_PARAM_A = "resourceId" 6private int resourceId; 7 8 public mFragmentA() { 9 } 10 public static mFragmentA newInstance(int resId) { 11 mFragmentA fragment = new mFragmntA(); 12 Bundle args = new Bundle(); 13 args.putInt(ARG_PARAM_A, resId); 14 fragment.setArguments(args); 15 return fragment; 16 } 17 18 @Override 19 public void onCreate(Bundle savedInstanceState) { 20 resourceId = getArguments().getInt(ARG_PARAM_A); 21 super.onCreate(savedInstanceState); 22 } 23 24 @Override 25 public View onCreateView(LayoutInflater inflater, ViewGroup container, 26 Bundle savedInstanceState) { 27 View rootView = inflater.inflate(R.layout.fragment_writer_list, container, false); 28 TextView textView = (TextView)cl.findViewById(resourceId); 29 textView.setText("hogehogehogehoge"); 30 return inflater.inflate(R.layout.m_fragment_A, container, false); 31 } 32 33 /////////中略//////// 34 35 public interface OnFragmentInteractionListener { 36 // TODO: Update argument type and name 37 void onFragmentInteraction(Uri uri); 38 } 39} 40

###mFragmentStatePagerAdapter

Java

1 2public class mFragmentStatePagerAdapter extends FragmentStatePagerAdapter { 3 int resourceId; 4 5 public mFragmentStatePagerAdapter(FragmentManager fm) { 6 super(fm); 7 resourceId = ..... 8 } 9 10 @Override 11 public Fragment getItem(int position) { 12 switch (position){ 13 case 0: 14 return mFragmentA.newInstance(resourceId); 15 case 1: 16 return mFragmentB.newInstance(resourceId); 17 } 18 return null; 19 } 20 21 @Override 22 public int getCount() { 23 return 2; 24 } 25 26 public CharSequence getPageTitle(int position){ 27 switch (position){ 28 case 0: 29 return "PageA"; 30 case 1: 31 return "PageB"; 32 } 33 return null; 34 } 35}

詳細は以上です。
簡潔にしていますが、ほぼ上記のようにコーディングするとsetTextが反映されずにxmlファイルで設定されたテキストが表示されてしまいます。

Log.dを用いて、Bundlleにて値が受け渡されていることは確認いたしました。getTextによってテキストがセットされていることも確認いたしました。そのため「値が入力されたが初期化されて戻ってしまった」「setTextのタイミングが悪く、setが反映されていない」のどちらかではないのかなと考えていました。

Fragmentのライフサイクルを学ぶのがよいのでしょうか?
何を勉強すれば解決までいけるのかもわからず、少し手詰まってしまいました。

大変長文で申し訳ありませんが、
皆様のお力添えどうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

onCreateViewのreturnを見てください。
初期化したViewとは別のインスタンスを返却しています。

また、クラス名のプリフィクスにmをつけるのはやめましょう。これはメンバ変数を表すプリフィクスです。

投稿2017/06/28 08:01

yona

総合スコア18155

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

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

i_zac8132

2017/06/28 13:02

早速の回答ありがとうございます! infratorのことを勘違いしていたようです。おかげで解決することができました。 インスタンスやViewの仕様を再度学ぶ機会となり、予想外のところでの勉強でとても参考になりました。 mはメンバ変数を意味するのですね、勝手に"my"の略称なのだと思っていました。 そういった常識のようなものは独学では身につき辛いので非常にありがたいです。 ご教授ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問