Android 将字符串传递给片段
我在MainActivity中有一个EditText视图,用户可以输入url。此MainActivity还包含一个将保存WebView的片段 我将其设置为,当片段显示时,url将加载到WebView中。但是我不知道如何将字符串传递给片段 以下是主要活动代码:Android 将字符串传递给片段,android,webview,fragment,android-view,Android,Webview,Fragment,Android View,我在MainActivity中有一个EditText视图,用户可以输入url。此MainActivity还包含一个将保存WebView的片段 我将其设置为,当片段显示时,url将加载到WebView中。但是我不知道如何将字符串传递给片段 以下是主要活动代码: public class MainActivity extends FragmentActivity { Button goBtn; EditText urlInput; String url; @Override protected
public class MainActivity extends FragmentActivity {
Button goBtn;
EditText urlInput;
String url;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
goBtn = (Button)findViewById(R.id.button1);
urlInput = (EditText)findViewById(R.id.editText1);
goBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
url = "http://"+urlInput.getText().toString(); //THIS TO FRAGMENT!
Toast.makeText(v.getContext(), "Search:" + url, Toast.LENGTH_SHORT).show();
}
});
这是片段代码:
WebView webDisplay;
String url;
AsyncHttpClient client;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.frag1_layout, container, false);
urlDisplay = (TextView)v.findViewById(R.id.textView1);
webDisplay = (WebView)v.findViewById(R.id.webView1);
return v;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//url = "http://"+this.getActivity() ???
client = new AsyncHttpClient();
client.get(url, new AsyncHttpResponseHandler(){
@Override
public void onSuccess(String response) {
Toast.makeText(getActivity(), "Success!", Toast.LENGTH_SHORT).show();
webDisplay.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}});
webDisplay.loadUrl(url);
}
});
我关心的值是MainActivity.java中的字符串URL变量
片段的事务由类TabFragment控制
public class TabFragment extends Fragment {
private static final int TAB1_STATE = 0x1;
private static final int TAB2_STATE = 0x2;
private int mTabState;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_tab, container, false);
//References to buttons in layout file
Button tabBtn1 = (Button)v.findViewById(R.id.tabBtn1);
Button tabBtn2 = (Button)v.findViewById(R.id.tabBtn2);
//add listener to buttons
tabBtn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
//Action to perform when Tab 1 clicked...
goToTab1View();
}
});
tabBtn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Action to perform when Tab 2 clicked...
goToTab2View();
}
});
return v;
}
//Tab action functions.
protected void goToTab1View() {
if(mTabState != TAB1_STATE){
mTabState = TAB1_STATE;
FragmentManager fm = getFragmentManager();
if(fm!= null){
//Perform fragment transaction
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.fragment_content, new FragTab1());
ft.commit();
}
}
}
protected void goToTab2View() {
if(mTabState != TAB2_STATE){
mTabState = TAB2_STATE;
FragmentManager fm = getFragmentManager();
if(fm!= null){
//Perform fragment transaction
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.fragment_content, new FragTab2());
ft.commit();
}
}
}
如果片段已经存在,那么这个答案是正确的 您可以在片段中定义公共方法。比如:
public void setString(final String str) { //... }
之后,让您的活动实现OnClickListener InterSave。当按下按钮时,只需键入如下内容:
public void onClick(View view) {
// Form url...
((YourWebViewFragment) getFragmentManager().findFragmentById(fragments_id)).setString(url);
}
如果片段已经存在,那么这个答案是正确的 您可以在片段中定义公共方法。比如:
public void setString(final String str) { //... }
之后,让您的活动实现OnClickListener InterSave。当按下按钮时,只需键入如下内容:
public void onClick(View view) {
// Form url...
((YourWebViewFragment) getFragmentManager().findFragmentById(fragments_id)).setString(url);
}
或者创建Bundle并使用fragment.setArgumentsmyBundle方法进行设置 或创建Bundle并使用fragment.setArgumentsmyBundle方法进行设置 我正在尝试你的建议,但现在我得到一个nullpointerexception错误。你的片段附加了吗?NPE通常意味着findFragmentById返回null。当你说片段是否已附加时,你的意思是在我执行上述操作之前它是否在容器中?如果你这样做了,那么它不是,当活动开始时,只有两个没有内容的选项卡。然后你应该使用Nikola Despotoski建议,因为如果没有附加片段,GetFraAgmentById将返回null。如果你需要一些帮助,我可以解释如何使用他的方法。事实上,我用你的答案让它工作了,谢谢!我正在尝试你的建议,但现在我得到一个nullpointerexception错误。你的片段附加了吗?NPE通常意味着findFragmentById返回null。当你说片段是否已附加时,你的意思是在我执行上述操作之前它是否在容器中?如果你这样做了,那么它不是,当活动开始时,只有两个没有内容的选项卡。然后你应该使用Nikola Despotoski建议,因为如果没有附加片段,GetFraAgmentById将返回null。如果你需要一些帮助,我可以解释如何使用他的方法。事实上,我用你的答案让它工作了,谢谢!这是在调用FragmentTransaction提交之前完成的。这是在调用FragmentTransaction提交之前完成的