2016-03-22 13 views
0

ビューページャが変更されたときにフラグメントをリフレッシュしたい。他のフラグメントが最初のフラグメントモデルを変更したときにフラグメントをリフレッシュ

package com.mcivisoft.rcbeam; 

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v4.view.ViewPager; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.EditText; 
import android.widget.TextView; 

import com.mcivisoft.rcbeam.R; 

public class FragBeamRec extends Fragment {  
    public static FragBeamRec newInstance() { 
     FragBeamRec fragment = new FragBeamRec(); 
     return fragment; 
    } 

    public FragBeamRec() {} 

    private EditText tasss = null; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     final View v = inflater.inflate(R.layout.fragment_frag_beam_rec, container, false); 

     tasss = (EditText)v.findViewById(R.id.txttttaasss); 
     tasss.setText(String.valueOf(var.asspass)); 

     ActivityBeamRec.mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
      @Override 
      public void onPageSelected(int position) { 
       if (position == 2) { 
        Fragment frg = null; 
        frg = getFragmentManager().findFragmentByTag("FragBeamRec"); 
        final FragmentTransaction ft = getFragmentManager().beginTransaction(); 
        ft.detach(frg); 
        ft.attach(frg); 
        ft.commit(); 
       } 
      } 

      @Override 
      public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {} 

      @Override 
      public void onPageScrollStateChanged(int state) {} 
     }); 

     return v; 
    } 
} 

これは機能していない、誰でも私になぜ教えてもらえますか?私は3日間この断片をリフレッシュしようとしています。

同じアクティビティ(タブ付きアクティビティ)内に他のフラグメントがあることをリフレッシュする理由は、最初のフラグメントには計算を行い、結果をグローバル変数に入れるボタンがあり、 public変数の値です。ボタンがクリックされる前に作成されているため、0.0というように表示されます。そのため、グローバル変数の現在の値が表示されるようにリフレッシュする必要があります。

+1

Plsは、ボタンクリックイベントのコードを表示します。 – Prudhvi

+0

なぜ断片化をリフレッシュするのですか?意味がない。 Uの値をアクティビティやその他のフラグメントに渡したい場合、カスタムのリスナインタフェースを作成します。 – uguboz

+0

値がグローバル変数にあるので、アクティビティやフラグメントはそれにアクセスできますが、問題は別のフラグメントの編集テキストに入れられません。 –

答えて

1

フラグメントをリフレッシュする代わりに、単にビューを更新するだけです。チュートリアルのためのフラグメント間の通信のガイド(http://developer.android.com/training/basics/fragments/communicating.html)を参照してください。同じコンセプトがここに適用されます。

基本的にあなたが次にフラグメントに

のようなものを持っているボタンの OnClickListenerインターフェイス

public interface OnCalcComplete {  
    void onCalculationComplete(int result); 
} 

この

button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      int result = 4 + 4; 
      fragBeamRec.onCalculationComplete(result); 
     } 
    }); 

のような内部の計算が完了しFragBeamRecフラグメントを通知することになるでしょう

public class FragBeamRec extends Fragment implements OnCalcComplete { 
    public void onCalculationComplete(int result) { 
     textView.setText(result); 
    } 
... 
} 
+0

ビューを更新する方法は? –

+0

'TextView'なら必要ありません。 'setText'を呼び出すと自動的に更新されます。申し訳ありませんが、私の答えがそうでないと暗示した場合 –

+0

私はそれを行う方法を見つけた、私の答えを参照してください、これは正しいですか? –

0

I public static EditText tasss = null;によって私はクリックリスナーのボタンでanywhere.andからアクセスすることができ、このようにprivate EditText tasss = null;を置き換えることによって、それをやったが

+0

このコードは微妙な理由から非常に危険です。静的フィールドは、クラスのすべてのインスタンスで共有され、スレッドセーフではありません。あなたのアプリが背景になっているときや画面を回転させたときにも、問題にぶつかります。また 'setText'をいつ呼び出すべきかをどのように知っていますか? –

0

FragBeamRec.tasss.setText(String.valueOf(var.asspass));は、私はあなたがActivityBeamRecの内側にあるViewPager内FragBeamRecを持っているあなたの全体の実装が

不安定だと思います。

ViewPagerの中に4つの断片がある場合、そのデータモデルに変更が発生したときにFragBeamRecが作成されていない可能性があります。

ベスト・インプリメンテーションは、ActivityBeamRecからすべてリフレッシュを実行することです。アクティビティの内部にviewPagerChangeListenerを登録します。また、モデルが変更されたときにActivityBeamRecアクティビティで起動されるListenerインターフェイスを結ぶこともできます。

あなたは今viewPager内部フラグメントインデックス位置に渡すことにより

private Fragment getFragmentFromPager(int index) { 
    return getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.parentViewPager + ":" + index); 
} 

を使用しての活動からのフラグメントを得ることができ、あなたはリフレッシュの任意のフォームをキャリーアウト可能なフラグメント・オブジェクトを取得します

関連する問題