2016-04-12 2 views
2

У меня есть активность, которая переключается между двумя фрагментами: одна отображает карту, а другая отображает список.Наложение вида на фрагмент перед добавлением его в действие

Когда активность первого начинается фрагмент карты добавляется к FrameLayout так:

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

В этом случае, второй фрагмент списка еще не завышены. Всякий раз, когда пользователь просматривает карту, я хочу, чтобы фрагмент списка обновлялся в соответствии с тем, где пользователь нажимает на карту.

Так в принципе, я хочу сделать что-то вроде

listFragment.updateList(...); 

Однако, поскольку вид фрагмента соответствующего списка не завышены еще, я не могу обновить свою точку зрения еще. Есть ли способ сделать это без необходимости ждать, пока я не добавлю фрагмент списка в FrameLayout?

В основном моя конечная цель - переход жидкости между фрагментами; когда пользователь переключается на представление списка, я хочу, чтобы представление обновлялось как можно быстрее (что произойдет, если я смогу обновить представление, прежде чем добавлять его в действие).

+0

У вас не может быть оба этих «Фрагмента» одновременно на экране? – razzledazzle

ответ

1

Я думаю, что вы можете хранить ваши обновленные list в вашем framgent как:

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

и при обновлении списка, вы можете проверить, что if(getView() != null) -> обновить ваш ListView или установить yourList = yourUpdateList. Затем в вашем фрагменте onCreateView проверка yourList имеет значение null или нет, если не null, просто установите данные в 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(); 
Смежные вопросы