我想将字符串传递给片段活动(主)中的所有fragment(child),也许这张图片可以解释我到底想做什么
https://dl.dropboxusercontent.com/u/57465028/SC20140205-163325.png
所以,从图片上方…我想通过按一个按钮从edittext传递一个字符串到vIEwpager中的所有活动….我该怎么做?
我尝试遵循此代码https://stackoverflow.com/a/12739968/2003393,但无法解决我的问题.
请帮助我…我被困住了
预先感谢.
这是我来自片段活动(MainActivity)的代码
公共类Swipe_Menu扩展FragmentActivity {
//String KeyWord;//private static final String KEYWORD = "keyword";private VIEwPager _mVIEwPager;private VIEwPagerAdapter _adapter;/** Called when the activity is first created. */@OverrIDepublic voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestwindowFeature(Window.FEATURE_NO_Title); setContentVIEw(R.layout.swipe_menu_image); button Back = (button)findVIEwByID(R.ID.account); Imagebutton Search = (Imagebutton)findVIEwByID(R.ID.search); EditText Keyword = (EditText)findVIEwByID(R.ID.keyword); final String KeyWord = Keyword.getText().toString(); /** * Back button click event * */ Back.setonClickListener(new VIEw.OnClickListener() { @OverrIDe public voID onClick(VIEw arg0) { finish(); } }); setUpVIEw(); setTab();}protected voID sendValuetoFragments(String value) { // it has to be the same name as in the fragment Intent intent = new Intent("my_package.action.UI_UPDATE"); intent.putExtra("UI_KEY", KeyWord ); LocalbroadcastManager.getInstance(this).sendbroadcast(intent);}
这是我的片段(儿童活动)
public class Store_Swipe extends Fragment {public static final String ACTION_INTENT = "my_package.action.UI_UPDATE";String KeyWord;private TextVIEw kata_keyword;protected broadcastReceiver receiver = new broadcastReceiver() { @OverrIDe public voID onReceive(Context context, Intent intent) { if(ACTION_INTENT.equals(intent.getAction())) { String value = intent.getStringExtra("UI_KEY"); updateUIOnReceiverValue(value); } }};private voID updateUIOnReceiverValue(String value) { // you probably want this: KeyWord = value;}public static Fragment newInstance(Context context) { Store_Swipe f = new Store_Swipe(); return f;}@OverrIDepublic voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); IntentFilter filter = new IntentFilter(ACTION_INTENT); LocalbroadcastManager.getInstance(getActivity()).registerReceiver(receiver, filter);}@OverrIDepublic voID onDestroy() { LocalbroadcastManager.getInstance(getActivity()).unregisterReceiver(receiver); super.onDestroy();}@OverrIDepublic VIEw onCreateVIEw(LayoutInflater inflater, VIEwGroup container, Bundle savedInstanceState) { /*Bundle bundle = this.getArguments(); KeyWord = bundle.getString("keyword");*/ VIEw vIEw = inflater.inflate(R.layout.store_swipe, container, false); init(vIEw); return vIEw;}voID init(VIEw vIEw) { kata_keyword = (TextVIEw) vIEw.findVIEwByID(R.ID.keyword); //ImageVIEw image = (ImageVIEw) vIEw.findVIEwByID(R.ID.image_error); kata_keyword.setText(KeyWord);}
}
解决方法:
您无权直接访问VIEwPager中的片段,因此无法直接引用它们.
在这些情况下,我要做的是将广播消息从“活动”发送到“片段”.因此,在片段中注册broadcatReceiver(在onCreate或onCreateVIEw中-由您决定)m,为该接收者设置自定义 *** 作(例如,“ my_package.actions.internal.broADCAST_ACTION”),不要忘记注销接收器从补充方法.
当您要通过活动发送消息时,请使用上述 *** 作创建一个意图,在意图中额外添加字符串并发送广播.
在接收者的onReceive方法(在片段内)中,从intent参数获取String,然后就可以得到该字符串.
说得通?
编辑:为了提供一些代码,以下是我将对片段进行的更改:
public class Store_Swipe extends Fragment { public static final String ACTION_INTENT = "my_package.action.UI_UPDATE"; protected broadcastReceiver receiver = new broadcastReceiver() { @OverrIDe public voID onReceive(Context context, Intent intent) { if(ACTION_INTENT.equals(intent.getAction())) { String value = intent.getStringExtra("UI_KEY"); updateUIOnReceiverValue(value); } } }; private voID updateUIOnReceiverValue(String value) { // you probably want this: kata_keyword.setText(value); } String KeyWord; private TextVIEw kata_keyword; public static Fragment newInstance(Context context) { Store_Swipe f = new Store_Swipe(); return f; } @OverrIDe public voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); IntentFilter filter = new IntentFilter(ACTION_INTENT); LocalbroadcastManager.getInstance(getActivity()).registerReceiver(receiver, filter); } @OverrIDe public voID onDestroy() { LocalbroadcastManager.getInstance(getActivity()).unregisterReceiver(receiver); super.onDestroy(); } @OverrIDe public VIEw onCreateVIEw(LayoutInflater inflater, VIEwGroup container, Bundle savedInstanceState) { Bundle bundle = this.getArguments(); KeyWord = bundle.getString("keyword"); VIEw vIEw = inflater.inflate(R.layout.store_swipe, container, false); init(vIEw); return vIEw; } voID init(VIEw vIEw) { kata_keyword = (TextVIEw) vIEw.findVIEwByID(R.ID.keyword); ImageVIEw image = (ImageVIEw) vIEw.findVIEwByID(R.ID.image_error); kata_keyword.setText(KeyWord); }}
我将从活动中获得以下代码,该参数是EditText的值:
protected voID sendValuetoFragments(String value) { // it has to be the same name as in the fragment Intent intent = new Intent("my_package.action.UI_UPDATE"); intent.putExtra("UI_KEY", value); LocalbroadcastManager.getInstance(this).sendbroadcast(intent);}
您将从在onCreate中设置的点击监听器调用此方法:
findVIEwByID(R.ID.button_ID).setonClickListener(new OnClickListener() { @OverrIDe public voID onClick(VIEw v) { String valueThatYouWantToSend = null; /// just the value sendValuetoFragments(valueThatYouWantToSend); }});
总结 以上是内存溢出为你收集整理的android-将字符串从片段主要活动传递给viewpager中的片段活动全部内容,希望文章能够帮你解决android-将字符串从片段主要活动传递给viewpager中的片段活动所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)