2016-07-01 9 views
-1

私はアクティビティを持っています:アクティビティ1(MainActivity)とアクティビティ2。ViewPager内のフラグメントにデータが自動的にリロードされない

アクティビティ1には、3つのフラグメント:フラグメント1、フラグメント2およびフラグメント3があります。

Activity2で実行されたアクションに従って、Fragment_3のデータを変更したいと考えています。

私はActivity2をFragment_2から呼び出して(Activity2で)何かを実行し、Fragment_2とView Fragmnet_3にヒットしました.Fragment_3のデータに変更はありません(Fragment_3 'データは実行されたアクションに従って変更する必要がありますアクティビティ2)。

ただし、Fragment_1を選択してFragment_3を選択すると、そのデータはActivity_2のアクションに従って変更されます。

私はFragment_2からActivity2を呼び出してそこに何か(Activity2で)行い、Fragment_2に戻り、Fragmnet_3を表示すると、データが変更されます。

どうすればよいですか?

+0

申し訳ありません誰か私の質問を編集し、私は、間違ったボタン – abcd1234

+1

「しかし、私が選んFragment_1とをクリックしてくださいFragment_3を選択すると、そのデータはActivity_2のアクションに従って変更されます。これは 'ViewPager'がどのように動作するかです。これは、2つの断片、前に1つ、次に1つをメモリに保持する。 [Android ViewPager:ViewPagerでオフスクリーンでキャッシュされたフラグメントを更新](http://stackoverflow.com/questions/23133912/android-viewpager-update-off-screen-but-cached-fragments-in-viewpager)を参照してください情報 – Sufian

+0

は@Sufianと合意しています.. **そして、あなたは自動的に更新するフラグメントを強制することはできません** .... !! –

答えて

0

あなたのフラグメントにこのメソッドを追加すると、このメソッドは、フラグメントが画面に表示されているときに常に呼び出します。

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 
     if(isVisibleToUser) 
         { 
         //your changes here 
         } 

} 
+0

"ここでの変更は" Fragment_3 reloadですか? – abcd1234

0

私はそれを作った! BroadCastRecevierを使用してください!

frament3:

public class MyFragment3 extends Fragment { 
String key; 
private TextView tv; 


@Override 
public void onResume() { 
    //register LocalBroadCastReceiver 
    LocalBroadcastManager lm = LocalBroadcastManager.getInstance(getContext()); 
    MyReceiver receiver = new MyReceiver(); 
    IntentFilter filter = new IntentFilter(); 
    filter.addAction("com.action.sodemo"); 
    lm.registerReceiver(receiver,filter); 

    super.onResume(); 

} 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_item3,container,false); 
    tv = (TextView) view.findViewById(R.id.tv_3); 

    return view; 
} 

class MyReceiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     key = intent.getStringExtra("value"); 
     tv.setText(key); 


    } 
} 

}

Activity2:

public class Activity_2 extends AppCompatActivity { 
private LocalBroadcastManager lm; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_activity_2); 
    lm=LocalBroadcastManager.getInstance(this); 

    Button btn = (Button) findViewById(R.id.btn_choose); 
    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //send value to fragment3 
      Intent intent = new Intent("com.action.sodemo"); 
      intent.putExtra("value","change"); 
      lm.sendBroadcast(intent); 
     } 
    }); 

} 

}

関連する問題