Фрагмент извещения от других действий - PullRequest
0 голосов
/ 25 марта 2019

В моем приложении я использую Fragments, чтобы показать некоторые данные о местоположении.Информация о текущем местоположении пользователя выбирается в моем MainActivity, и Fragment использует эти координаты для продолжения.Вопрос, который у меня возникает, состоит в том, как я позволю этим двум классам работать вместе: когда я использую их сейчас, Fragment пытается получить доступ к данным местоположения в MainActivity, как только они открыты, независимо от того, было ли местоположение уже выбрано илине.Как я могу получить местоположение и уведомить Fragment после этого, чтобы он знал, что он может продолжить работу со своим кодом и правильно обращаться к координатам?Или вся процедура считается неправильной, и этот вопрос решается по-другому?

Это идея моего MainActivity:

public class MainActivity extends AppCompatActivity {

public static Double lat;
public static Double lon;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    showLocation();

}

private void showLocation() {
//Grab Location
    if (location != null) {
        lat = location.getLatitude();
        lon = location.getLongitude();
    }

}

Это идея моего Fragment:

public class FragmentA extends Fragment {

public FragmentA() {
    // Required empty public constructor
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

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


    return view;
}

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

}

public void start(){
    if (MainActivity.lat != null && MainActivity.lon != null) {
        lat = MainActivity.lat;
        lon = MainActivity.lon;

        //proceed with location data
    } else {

    }

}

}

1 Ответ

1 голос
/ 25 марта 2019

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

Вы можете найти его в контейнере (xml), где он раздувается:

((FragmentA) getSupportFragmentManager().findFragmentById(R.id.yourContainer))

или

Вы можете искать фрагмент в стеке с помощью тега , назначенного во время загрузки:

// First load your fragment
getSupportFragmentManager().beginTransaction()
  .replace(R.id.yourContainer, fragment, "yourFragmentTag")
  .addToBackStack(null)
  .commit()

// Then you can access it
((FragmentA) getSupportFragmentManager().findFragmentByTag("yourFragmentTag"))

Чтобы получить доступ от фрагмента к действию, вы можете использовать интерфейс, как описано в этом ответе .

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...