丸一日が経ちましたが、単純な作業だと思っていたことを実行しようとしています。つまり、インターネットの可用性に基づいてさまざまなビューを表示するフラグメントを実装しています。
明確にするために: 接続せずに YouTube アプリを起動しようとすると、[再試行] ボタンのある美しいエラー画面が表示されます。ボタンをクリックすると、フラグメント (ビューのみ、またはその他のもの) がリロードされ、インターネットが利用可能になった場合は、正しいアイテムが表示されます。
ViewPager 内に 2 つのフラグメントがあります。最初のフラグメントにエラー メッセージと [再試行] ボタンを表示させたい。ボタンが押されると、YouTube アプリと同じように、フラグメントのコンテンツをリロードし、ネットワークが利用可能な場合は正しいものを表示したいと考えています。
フラグメント全体を内部とメインアクティビティから置き換えようとしましたが、プログラムでビューを変更したり、その他のものを変更したりしましたが、成功しませんでした。
助けてください!
編集:
エラー ビューを表示できます。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
}
});
}
編集: @daro2189 の回答を使用して問題を解決しましたが、これは少し異なりました: この場合、ビューページャー内の 2 つのフラグメントのうちの 1 つのビューのみを変更する必要があります。
@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();
}
}
}
});
}