2017-02-14 9 views
0

ユーザーがクリックした内容に基づいてフラグメント内のテキストビューを更新しようとしています。最初にアクティビティを読み込むと、テキストビューが設定されます。しかし、後で、たとえtextview.settextが呼び出されても、何も変わっていないようです。私の活動でフラグメント内のtextview.settextが最初の呼び出し後に機能しない

は、私はこのような新しい変数を送信します。

getSupportFragmentManager().beginTransaction().add(R.id.pager1, SecondFragment.newInstance(2, "Page # 2", nonStaticRandomInfoSt), "tag").commit(); 

マイ・フラグメントを:

public static SecondFragment newInstance(int page, String title, String randomInfo) { 
    SecondFragment fragmentSecond = new SecondFragment(); 
    Bundle args = new Bundle(); 
    args.putInt("someInt", page); 
    args.putString("someTitle", title); 
    args.putString("randomInfo", randomInfo); 
    fragmentSecond.setArguments(args); 


    return fragmentSecond; 
} 

// Store instance variables based on arguments passed 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    randomInfo = this.getArguments().getString("randomInfo"); 




} 

// Inflate the view for the fragment based on layout XML 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.fragment_second, container, false); 


    TextView randomInfoTV = (TextView) view.findViewById(R.id.randomInfo); 

    randomInfoTV.setText(randomInfo); //this is getting called, but it's not changing the textview 
    randomInfoTV.setMovementMethod(new ScrollingMovementMethod()); 


    return view; 
} 

編集:

私はviewpagerでフラグメントを持っています。アクティビティが最初に入力されると、フラグメントのテキストビューにデフォルト値が設定されます。私の活動レイアウトのリストビューから、ユーザーは選択を行うことができます。アイテムが選択されると、私はフラグメントマネージャを呼び出し、新しいrandomInfo変数を渡します。私はその断片のテキストビューを更新したい。私は正しい値がデバッグによって渡されていることを知っています。私はtextview.settextも呼び出されていることを知っています。しかし何らかの理由で、テキストビューは変更されません。なぜこのようなことが起こっているのかについての示唆はありますか?私はそれを修正することをどこで始めるべきかも知らない。私は断片の作成方法

public static class MyPagerAdapter1 extends FragmentPagerAdapter { 
    private static int NUM_ITEMS = 2; 

    public MyPagerAdapter1(FragmentManager fragmentManager) { 
     super(fragmentManager); 
    } 

    // Returns total number of pages 
    @Override 
    public int getCount() { 
     return NUM_ITEMS; 
    } 

    // Returns the fragment to display for that page 
    @Override 
    public Fragment getItem(int position) { 
     switch (position) { 
      case 0: // Fragment # 0 - This will show FirstFragment 
       return FirstFragment.newInstance(0, "Page # 1", imageURL); 

      case 1: // Fragment # 0 - This will show FirstFragment different title 
       return SecondFragment.newInstance(2, "Page # 2", randomInfoSt); 


      default: 
       return null; 
     } 
    } 

Clickイベントのコードを、 public void onViewCreated(final View view, final Bundle savedInstanceState);代わりのonCreateView()でテキストを設定

listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int position, 
           long id) { 
      // TODO Auto-generated method stub 

      if (!fromservice) { 
       Log.i(TAG, "about to start service"); 

      //starting service code... 


       initFragmentVars(position); //this runs the fragmentmanager transaction 

      } 
+1

?私は1つだけを参照してください – yanivtwin

+1

'nonStaticRandomInfoSt'とは何ですか、それは決して変更されませんでしたか? – WenChao

+0

ユーザーがあなたのアプリとどのようにやり取りし、何が起こるかを説明してください。次に、**あなたが望むものを**説明してください。 –

答えて

0

あなたがしていること(findViewById())では後でOKですが、データとビューのバインドは、ビューが作成された後、特にフラグメント内で実行する必要があります。あなたがのsetTextんです他

私はこれが紛らわしいですけど、Androidのライフサイクルは、異なるソフトウェアエンジニアの数十によって作成された混乱であり、ここで我々は

...

+1

これは大きな違いはありません。 –

+0

フラグメントを使用している場合はそうです。コールバックが存在する理由があります。 –

+0

いいえ、そうではありません。 opがそれをやっているやり方はまったくいいです。 –

関連する問題