1

丸一日が経ちましたが、単純な作業だと思っていたことを実行しようとしています。つまり、インターネットの可用性に基づいてさまざまなビューを表示するフラグメントを実装しています。

明確にするために: 接続せずに YouTube アプリを起動しようとすると、[再試行] ボタンのある美しいエラー画面が表示されます。ボタンをクリックすると、フラグメント (ビューのみ、またはその他のもの) がリロードされ、インターネットが利用可能になった場合は、正しいアイテムが表示されます。

ViewPager 内に 2 つのフラグメントがあります。最初のフラグメントにエラー メッセージと [再試行] ボタンを表示させたい。ボタンが押されると、YouTube アプリと同じように、フラグメントのコンテンツをリロードし、ネットワークが利用可能な場合は正しいものを表示したいと考えています。

フラグメント全体を内部とメインアクティビティから置き換えようとしましたが、プログラムでビューを変更したり、その他のものを変更したりしましたが、成功しませんでした。

助けてください!

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();
                }
            }
        }
    });
}
4

2 に答える 2

1

それに時間を無駄にしないでください。このライブラリを使用してください: https://github.com/medyo/dynamicbox

于 2015-04-24T19:48:23.253 に答える
1

いくつかのコードを提供してください。

私のヒント: メイン レイアウトでは、id=main_fragment の FragmentLayout が必要です アクティビティでは、id=main_fragment にボタン「インターネットなし」を含むフラグメントを表示するメソッド「noInternetView()」を作成します インターネット実行機能がない場合、noInternetView() その他は通常のビューを表示します

いくつかのコード:

//This code put into noInterneView() - because it opens fragment with no internet layout
FragmentTransaction ft = getActivity().getFragmentManager().beginTransaction();
NoInternetFragment bdf = new NoInternetFragment();
ft.replace(R.id.main_fragment, bdf);
ft.addToBackStack(null);
ft.commit();

Fragment を変更することにより、上記のコードを使用して通常のフラグメントを開きます

と:

If(noInternetConnection){
  //open fragment with no internet laout - code above
} else {
   //open fragment with normal layout
}

私が助けてくれることを願っています:)

- - アップデート - - -

private View noInternetView = null;

@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)
            noInternetView.setVisibility(View.VISIBLE);
    }
}

private void initNoInternetView(View view){
    if(view == null)
        return;

    RelativeLayout parentView = (RelativeLayout)view.findViewById(R.id.parent_view);

    LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    noInternetView = inflater.inflate(R.layout.layout_no_connectivity, null);
    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);
            }
        }
    });
}
//XML layout
//Remember to in xml layout (fragment_with_connection) your main layout was a    //RelativeLayout with id parent_view

    //something like this:



 <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/parent_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    //here put your view pager

    </RelativeLayout>
于 2013-09-06T11:55:18.543 に答える