Есть два возможных подхода к этому.
FragmentB получает данные sunRise и обновляет свой собственный TextView
Пусть FragmentB
напрямую получит значения sunRise и обновит его TextView
, вместо того, чтобы выполнять поиск в MainActivity
.
OR
Связь между действием и фрагментом через интерфейс
Этот ответ аналогичен другому ответу в этой теме, но более подробно о том, как вы должны установить фрагмент TextView
. Это решение делает несколько предположений и может быть упрощенным из-за ограниченной информации в вашем вопросе:
Предположение 1 : В этом решении предполагается, что метод getSunriseSunset
является синхронным, т.е. не зависит от какой-либо услуги или сетевого вызова. Если он асинхронный, вам потребуется отдельный обратный вызов в вашем MainActivity
(например, onSunriseRetrieved
) для прослушивания, когда ваши данные возвращаются, до обновления вашего фрагмента.
Предположение 2 : Это решение также предполагает, что вы хотите получить доступ к представлениям фрагмента сразу после его добавления (следовательно, вызов executePendingTransactions
). Тем не менее, если у вас FragmentB выполняет собственный поиск sunRise, то это предположение не понадобится.
Определите интерфейс в Деятельности и:
public class MainActivity extends AppCompatActivity
{
public interface OnSunriseChangeListener
{
void onSunriseChange(String newText);
}
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null)
{
getFragmentManager()
.beginTransaction()
.add(R.id.fragment_container, new FragmentB()))
.commit();
//assuming you want access to the fragment's views immediately
getFragmentManager().executePendingTransactions();
}
getSunriseAndUpdateFragment(fragment);
}
/**
* Assumes that getSunriseSunset is synchronous and assumes that FragmentB is created.
*/
private void getSunriseAndUpdateFragment()
{
String newSunRiseValue = getSunriseSunset();
((FragmentB)getFragmentManager().findFragmentById(R.id.fragment_b)).onSunriseChange(newSunRiseValue);
}
// other code not shown...
}
У FragmentB реализован интерфейс:
public class FragmentB extends Fragment implements OnSunriseChangeListener
{
@Override
public void onSunriseChange(String newSunriseData)
{
TextView textView = getView.findViewById(R.id.DisplaySunrise);
textView.setText(newSunriseText);
}