2016-04-12 12 views
2

マップを表示し、リストを表示する2つのフラグメントを切り替えるアクティビティがあります。 アクティビティにフラグメントを追加する前にフラグメントを拡大する

活動が最初に起動

は、地図の断片は、そうでframeLayoutように添加される:

getSupportFragmentManager() 
     .beginTransaction() 
     .replace(R.id.content_frame, mapFragment) 
     .commit(); 

その場合、2番目のリスト断片がまだ膨張していません。ユーザーが地図を閲覧するたびに、ユーザーが地図上でどこをパンするかに応じてリストの断片を更新します。

だから基本的に、私は、リスト・フラグメントのビューはまだ膨張されていないので、しかし、私はまだそのビューを更新することはできません

listFragment.updateList(...); 

のような何かをしたいです。リストフラグメントをFrameLayoutに追加するまで待つことなく、これを行う方法はありますか?

基本的に私の最終目標は、フラグメント間の流体移行です。ユーザーがリストビューに切り替えると、ビューをできるだけ早く更新したい(ビューをアクティビティに追加する前にビューを更新できる場合に発生する)。

+0

「フラグメンテーション」を画面に同時に表示することはできませんか? – razzledazzle

答えて

1

は、私はあなたが保存することができると思うあなたとあなたのframgentにlistを更新:

public class yourFragment extends Fragment{ 
     private ArrayList<Object> yourList; 
} 

、あなたがリストを更新するとき、あなたはif(getView() != null)ことを確認することができます - >更新あなたのListViewyourList = yourUpdateListを設定します。次に、フラグメントのonCreateViewで、yourListがヌルであるかどうかをチェックします。ヌルでない場合は、データをListViewに設定します。

0

フラグメントには、フラグメントにデータを提供するPresenterへのリンクがあります。

public interface ListPresenter { 
    public List<Object> getObjects(); 
} 

private ListPresenter presenter; 
@Override 
public void onAttach(Activity activity) { 
    presenter = (ListPresenter)activity; 
} 

を断片化するために、このプレゼンターを取り付けては、その後、あなたがデータを取得したい時はいつでも、それは常に活動から利用できるようになるプレゼンターメソッドを呼び出します。

マップインタラクタを追加してオブジェクトを更新することもできます。活動で

public interface MapInteractor { 
    void setObjects(List<Object> objects); 
} 

public class MyActivity extends Activity implements ListPresenter, 
                MapInteractor { 
... 
@Override 
public List<Object> getObjects() { 
    return currentObjects; 
} 

@Override 
public void setObjects(List<Object> objects) { 
    currentObjects = objects; 
} 

はすぐにあなたが最初に隠された状態でそれを追加することができますし、後でそれを示すあなたのフラグメントをインスタンス化します。

getSupportFragmentManager() 
    .beginTransaction() 
    .add(R.id.content_frame, listFragment) 
    .hide(listFragment) 
    .commit(); 
関連する問題