我有一个活动(MainActivity),它延伸到Activity和一个相关的片段(FragmentFive)
在Fragment中有一个搜索栏,我想从MainActivity访问它的值。 怎么做? API级别18 或以上。
MainActivity有一个Button,当点击时会指向FragmentFive:android:onClick =“goFag5”
“活动”的示例代码非常有用!片段代码如下所示;
FragmentFive.java
public class FragmentFive extends Fragment {
private SeekBar RedBar;
public FragmentFive() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_five, container,
false);
RedBar = (SeekBar) v.findViewById(R.id.seekBar1);
RedBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
Log.d("HM", progress+": value");
}
});
return v;
}
}
主要活动中的代码
public void gofag5(View v) {
// TODO Auto-generated method stub
FragmentFive frag = new FragmentFive();
FragmentManager fm = getFragmentManager(); // import
FragmentTransaction ftr = fm.beginTransaction(); // import
ftr.add(R.id.mainlayout, frag, "keyFrag");
ftr.addToBackStack(null);
ftr.commit();
}
答案 0 :(得分:0)
可以为片段中的SeekBar创建getter
和setter
。
在你的活动中,你必须抓住片段。具体取决于你如何创建片段。如果您确实以编程方式创建它,那么您可能已经有了它的实例,因为您创建了它:
MyFragment myFragment = new Fragment();
或者您在XML布局文件中嵌入了Fragment,然后您可以使用类似
的内容myFragment = getFragmentManager().findFragmentById(R.id.myFragment);
然后你可以这样做:
myFragment.getSeekBar();
注意:上面是伪代码,不起作用,但它应该给你一个想法。使用第二种方法时,您需要cast
片段到MyFragment。
答案 1 :(得分:0)
接口可用于从片段调用回Activity。
public class SettingFollow extends Fragment implements
OnSeekBarChangeListener {
public interface BestRidesFollowDialogListener {
void onSettingFollowChange(int progress);
}
BestRidesFollowDialogListener bestRidesFollowDialogListener;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// the activity may be null if this is called without implementing the
// interface
activity = getActivity();
bestRidesFollowDialogListener = (BestRidesFollowDialogListener.class
.isAssignableFrom(activity.getClass())) ? (BestRidesFollowDialogListener) activity
: null;
view = inflater.inflate(R.layout.settings_follow, container,
false);
return view;
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// we save and process the value here
switch (seekBar.getId()) {
case R.id.sbFollowMillis:
//call through the interface if its non null the
// only time its null is when the programmer has
// not implemented the interface in the activity that started
// the fragment.
if (bestRidesFollowDialogListener != null) {
bestRidesFollowDialogListener.onSettingFollowChange(seekBar.getProgress());
}
}
然后在你的活动中实现片段的接口,在上面的例子中,它被称为BestRidesFollowDialogListener,让你的ide创建存根。
注意未显示保存片段中搜索条的值。将搜索栏初始化为片段中保存的值。对于长类名称感到抱歉,但如果你有一些片段接口要处理活动,那么长类和方法名称确实很有帮助。