【问题标题】:Open a WebView in a fragment MainActivity在片段 MainActivity 中打开 WebView
【发布时间】:2015-07-02 17:25:51
【问题描述】:

我拥有的东西:一个导航抽屉,一个显示 rss 新闻的片段,屏幕底部的两个按钮。

我想要什么:通过单击两个按钮之一打开片段内的 web 视图。

我的文件:

MainActivity.java:

 import android.content.ActivityNotFoundException;
    import android.content.Intent;
    import android.net.Uri;
    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentManager;
    import android.support.v4.app.FragmentTransaction;
    import android.support.v4.widget.DrawerLayout;
    import android.support.v7.app.ActionBar;
    import android.support.v7.app.ActionBarActivity;
    import android.view.View;
    import android.webkit.WebView;
    import android.widget.Button;

    import com.jmsliu.rssreader.model.PostDataModel;
    import com.jmsliu.rssreader.model.vo.DrawerData;
    import com.jmsliu.rssreader.model.vo.PostData;

    public class MainActivity extends ActionBarActivity
            implements NavigationDrawerFragment.NavigationDrawerCallbacks,
            PostListFragment.PostListFragmentInteractionListener{

        /**
         * Fragment managing the behaviors, interactions and presentation of the navigation drawer.
         */
        private NavigationDrawerFragment mNavigationDrawerFragment;

        @Override
        protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
            getSupportActionBar().setCustomView(R.layout.abs_layout);

            Button youTubeButton = (Button) findViewById(R.id.button2);
            youTubeButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                }
            });
            mNavigationDrawerFragment = (NavigationDrawerFragment)
                    getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);

            // Set up the drawer.
            mNavigationDrawerFragment.setUp(
                    R.id.navigation_drawer,
                    (DrawerLayout) findViewById(R.id.drawer_layout));
        }  

        @Override
        public void onNavigationDrawerItemSelected(int position) {
            //PostListFragment postListFragment = (PostListFragment) getSupportFragmentManager().findFragmentById(R.id.postListView);
            PostListFragment postListFragment = (PostListFragment) getSupportFragmentManager().findFragmentByTag("postlist_fragment");

            DrawerData data = GlobalClass.instance().categoryList.get(position);
            if(data.name != "") {
                String url = String.format(GlobalClass.CATEGORY_RSSURL, data.name);
                postListFragment.rssURL = String.format(GlobalClass.CATEGORY_RSSURL, data.name);
                //Toast.makeText(this, url, Toast.LENGTH_SHORT).show();

            } else {
                postListFragment.rssURL = GlobalClass.RSSURL;
                //Toast.makeText(this, GlobalClass.instance().RSSURL, Toast.LENGTH_SHORT).show();
            }

            PostDataModel.getInstance().listData.clear();
            PostDataModel.getInstance().guidList.clear();
            postListFragment.manualRefresh();   
        }

        @Override
        public void onPostSelected(int index) {
            PostData data = PostDataModel.getInstance().listData.get(index);
            FragmentManager fragmentManager = getSupportFragmentManager();
            PostViewFragment postViewFragment = (PostViewFragment) getSupportFragmentManager().findFragmentByTag("postview_fragment");
            if(postViewFragment == null) {
                postViewFragment = PostViewFragment.newInstance(data.postLink);
            } else {
                postViewFragment.urlLink = data.postLink;
            }

            postViewFragment.title = data.postTitle;
            FragmentTransaction ft = fragmentManager.beginTransaction();
            ft.replace(R.id.container, postViewFragment, "postview_fragment");
            ft.addToBackStack(null);
            ft.commit();
        }
    }

activity_main.xml:

    <!-- As the main content view, the view below consumes the entire
         space available using match_parent in both dimensions. -->
    <FrameLayout android:id="@+id/container" android:layout_width="match_parent"
        android:layout_height="match_parent">
        <fragment
            android:id="@+id/postlist_fragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:tag="postlist_fragment"
            android:name="com.jmsliu.rssreader.PostListFragment"/>

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="SEGNALA"
            android:id="@+id/segnala"
            android:background="#000000"
            android:textColor="#ffffff"
            android:clickable="true"
            android:layout_gravity="center|bottom"
            android:layout_alignParentTop="false"
            android:layout_alignWithParentIfMissing="false"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentStart="false"
            android:layout_alignParentEnd="false"
            android:layout_alignParentBottom="true" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/button2"
            android:text="YouTube"
            android:background="#000000"
            android:textColor="#ffffff"
            android:clickable="true"
            android:layout_gravity="right|bottom" />

    </FrameLayout>

    <!-- android:layout_gravity="start" tells DrawerLayout to treat
         this as a sliding drawer on the left side for left-to-right
         languages and on the right side for right-to-left languages.
         If you're not building against API 17 or higher, use
         android:layout_gravity="left" instead. -->
    <!-- The drawer is given a fixed width in dp and extends the full height of the container. -->
    <fragment android:id="@+id/navigation_drawer"
        android:layout_width="@dimen/navigation_drawer_width" android:layout_height="match_parent"
        android:layout_gravity="start" android:name="com.jmsliu.rssreader.NavigationDrawerFragment"
        tools:layout="@layout/fragment_navigation_drawer" />

</android.support.v4.widget.DrawerLayout>

【问题讨论】:

    标签: java android android-fragments android-activity webview


    【解决方案1】:

    看起来很简单。只需使用 webview 创建新片段并像这样替换按钮的点击监听器内的片段

        button.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                             Fragment fragment = WebViewFragment.newInstance(string dataOrAnythingYouWillUseToPassContent)
    getSupportFragmentManager().beginTransaction().replace(android.R.id.content, R.id.fragment_container,fragment).addToBackStack(stringTag).commit();
                        }
                    });
    

    在 webviewfragment 静态 newInstance 方法中将数据打包到片段参数中,并在 onCreate 方法中或在您需要它们时检索它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多