Это был целый день, я пытаюсь сделать то, что, как я думал, это простая задача: реализовать фрагмент, отображающий различные представления на основе доступности Интернета.Как изменить вид фрагмента программно (когда интернет недоступен)
Чтобы быть ясным: попробуйте запустить приложение YouTube без подключения, вы увидите красивый экран с кнопкой «Повторить». Когда вы нажимаете кнопку, фрагмент (только просмотр или что-то еще) перезагружается и, если доступ в Интернет теперь доступен, отображает правильные элементы.
У меня есть два фрагмента внутри ViewPager. Я хочу, чтобы первый фрагмент отображал сообщение об ошибке и кнопку «Повторить». Когда кнопка нажата, как и приложение youtube, я хочу перезагрузить содержимое фрагментов и отобразить правильные файлы, если сеть доступна.
Я попытался заменить весь фрагмент изнутри себя и из основной деятельности, изменив представление программно и на другие вещи, я не имел никакого успеха.
Пожалуйста, помогите!
EDIT:
я могу отобразить представление об ошибке, я просто проверить наличие интернет внутри метода OnCreateView:
@Override
public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) {
final View view;
if(CheckNetwork.isInternetAvailable(getActivity())){
view = inflater.inflate(R.layout.fragment_with_connection, container, false);
}
else{
view = inflater.inflate(R.layout.layout_no_connectivity, container, false);
Button button = (Button)view.findViewById(R.id.button_retry);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View mview) {
//DUNNO WAT TO DO
}
});
}
EDIT: У меня есть использовал ответ @ daro2189, чтобы решить мою проблему, кто был немного другим: в этом случае мне нужно только изменить v ОДИН из двух фрагментов внутри пейджера представления.
@Override
public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_with_connection, container, false);
initNoInternetView(view);
if (!CheckNetwork.isInternetAvailable(getActivity())) {
if (noInternetView != null) {
View child = view.findViewById(R.id.child);
child.setVisibility(View.GONE);
noInternetView.setVisibility(View.VISIBLE);
}
} else {
getInfoFromInternet();
}
return view;
}
private void initNoInternetView(final View view) {
if(view == null)
return;
RelativeLayout parentView = (RelativeLayout)view.findViewById(R.id.layout_no_connectivity);
LayoutInflater inflater = (LayoutInflater)getActivity().getSystemService(getActivity().LAYOUT_INFLATER_SERVICE);
noInternetView = inflater.inflate(R.layout.layout_no_connectivity, null);
noInternetView.setVisibility(View.GONE);
parentView.addView(noInternetView);
final Button button = (Button)noInternetView.findViewById(R.id.button_retry);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View mview) {
if(!CheckNetwork.isInternetAvailable(getActivity())){
if(noInternetView != null){
noInternetView.setVisibility(View.VISIBLE);
noInternetView.bringToFront();
}
} else {
if(noInternetView != null){
noInternetView.setVisibility(View.GONE);
View child = view.findViewById(R.id.child);
child.setVisibility(View.VISIBLE);
getInfoFromInternet();
}
}
}
});
}
Я могу изменить фрагмент, чтобы отобразить экран ошибки. Я делаю это, просто проверяя наличие соединения в методе OnCreateView. Что я не могу сделать, это изменить представление при нажатии кнопки «Повторить». – JoP
Чтобы изменить макет, вы должны переопределить метод onClick(), а затем использовать функцию проверки макета, понимаете ли вы, что я имею в виду? или я могу предоставить еще какой-нибудь код? –
Пожалуйста, предоставьте мне код. Моя проблема в том, что я не знаю, как изменить макет, я провалил каждую попытку T.T – JoP