我有一个Android应用程序,其中我使用了webview
片段。从该片段,我将使用下面的代码获取当前的URL。但问题是我想从MainActivity访问String webUrl
。
我怎样才能得到它?我实际计划做的是根据片段中用户的意愿创建一个喜欢的网址。
final String webUrl = view.getUrl();
答案 0 :(得分:1)
从活动到片段:
在您的片段中,使用getActivity()
方法访问Activity的对象。
YourActivity activity = (YourActivity) getActivity();
activity.someString = "some_url";
webView.setUrl(activity.someString);
从片段到活动:
FragmentManager fm = getSupportFragmentManager();
SampleFragment sampleFragment=(SampleFragment) fm.findFragmentById(R.id.fragment_id);
activity.someString = "some_url";
webView.setUrl(activity.someString);
您的片段根视图应具有相同的ID:
SampleFragment.xml
档案
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_id" >
<!-- [Your other layout views goes here] -->
</LinearLayout>
答案 1 :(得分:1)
创建界面:
public interface HomeListener {
void onHomeClick(String url);
}
现在在片段中:
HomeListener mCallback;
@Override
public void onAttach(Context con) {
super.onAttach(con);
try {
mCallback = (HomeListener) con;
} catch (ClassCastException e) {
e.printStackTrace();
}
}
@Override
public void onDetach() {
mCallback = null;
super.onDetach();
}
现在,当网址获取时:
mCallback.onHomeClick(view.getUrl());
最后在Activity中,实现HomeListener,并覆盖方法:
@Override
public void onHomeClick(String url) {
Log.e("urlFromFragment",url);
}
示例活动:
public class MainActivity extends AppCompatActivity
implements HomeListener {
String URL="";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public void onHomeClick(String url) {
URL=url;
Toast.makeText(getApplicationContext(), URL, Toast.LENGTH_LONG).show();
}