我想要做的是创建一个应用程序,我在主屏幕中有可点击的图像。
我想到的想法是当我点击图像时出现带有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有一种更短更简单的方法。有人可以指导我吗?
答案 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。就这样。希望能帮助到你。最好的。