图像上的OnClick()会添加具有不同信息的相同片段

时间:2016-07-17 02:21:25

标签: java android android-fragments onclick

我想要做的是创建一个应用程序,我在主屏幕中有可点击的图像。

我想到的想法是当我点击图像时出现带有WebView的片段。每个图像都必须在WebView中提供不同的信息,但我无法做到这一点,所以我继续这样做:

public class MainActivity extends Activity implements OnClickListener{

    private ImageView image1;
    private ImageView image2;
    private ImageView image3;
    private ImageView image4;
    private ImageView image5;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        image1 = (ImageView) findViewById(R.id.imageView1);
        image2 = (ImageView) findViewById(R.id.imageView2);
        image3 = (ImageView) findViewById(R.id.imageView3);
        image4 = (ImageView) findViewById(R.id.imageView4);
        image5 = (ImageView) findViewById(R.id.imageView5);

        image1.setOnClickListener(this);
        image2.setOnClickListener(this);
        image3.setOnClickListener(this);
        image4.setOnClickListener(this);
        image5.setOnClickListener(this);


    }

    @Override
    public void onClick(View v) {

        Intent i = null;
        //Toast.makeText(getApplicationContext(), "working", Toast.LENGTH_SHORT).show();

        switch (v.getId()) {
        case R.id.imageView1:
            i = new Intent(getApplicationContext(), WebviewActivity1.class);
        break;
        case R.id.imageView2:
            i = new Intent(getApplicationContext(), WebviewActivity2.class);
        break;
        case R.id.imageView3:
            i = new Intent(getApplicationContext(), WebviewActivity3.class);
        break;
        case R.id.imageView4:
            i = new Intent(getApplicationContext(), WebviewActivity4.class);
        break;
        case R.id.imageView5:
            i = new Intent(getApplicationContext(), WebviewActivity5.class);
        break;
        }
        startActivity(i);
    }
}

我不知道如何使用Fragments所以我只是创建了不同的活动,用WebView调用xml,我以编程方式更改了每个活动中的WebView内容。

我相信使用Fragments有一种更短更简单的方法。有人可以指导我吗?

1 个答案:

答案 0 :(得分:4)

恢复您希望使用相同的布局和webview显示相同的片段或活动但是在此webview中具有不同的内容。因此将参数传递给第二个活动或片段。在那里,您可以收集这些参数,并在每种情况下按您的需要进行操作(在Webview上加载内容X或Y)。

这些参数可以在sharedpreferences或bundle参数的帮助下传递。

编辑:如果您想让事情变得更容易,请不要在此时使用片段。如果您需要实施ViewPager,例如,要刷屏幕,那么将是另一次。现在,让我们扩展您的活动样本,让事情发生。

首先,在您的 AndroidManifest.xml 中,您必须获得访问互联网的权限(如果您打算从那里加载网页),请将其放在<application>之前:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

然后,在<application>内,声明第二个活动,您将在其中显示您的网页视图。我们将此活动称为Webview.class。以这种方式定义它,但在清单文件中:

<activity android:name=".Webview" android:label="My Test Webview" />

现在让我们看看整个 Webview.java

public class Webview extends Activity{

private WebView wv;
private String url;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.webview);

    // get the url to open
    Intent intentBundle = this.getIntent();
    url = intentBundle.getStringExtra("url");

    wv = (WebView) findViewById(R.id.myWebView);
    wv.setWebViewClient(new WebViewClient()); // needed to open url inside our webview, otherwise it will open at the default browser
    wv.loadUrl(url);
}}

精细。这个java将需要我称为 webview.xml 的布局文件,其内容为:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#ff0000"
>
<WebView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/myWebView"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    />
</LinearLayout>

最后,在 MainActivity.java 的onClick上,更改您调用辅助活动的地点,如下所示:

1 - 从此Intent i = null;到此Intent i = new Intent(getApplicationContext(), Webview.class);

2 - 然后,在您的交换机的每种情况下,您实现此模型:

case R.id.imageView1:
i.putExtra("url", "file:///android_asset/alocalpage.htm"); // use this to call a page on your assets folder
break;

case R.id.imageView2:
i.putExtra("url", "http://www.google.com");
break;

依此类推,与下一个imageViews的想法相同,为每个imageViews定义一个url。就这样。希望能帮助到你。最好的。