从Activity访问Fragment的seekBar值

时间:2014-06-10 19:49:31

标签: android android-fragments seekbar android-seekbar

我有一个活动(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();

}

2 个答案:

答案 0 :(得分:0)

可以为片段中的SeekBar创建gettersetter。 在你的活动中,你必须抓住片段。具体取决于你如何创建片段。如果您确实以编程方式创建它,那么您可能已经有了它的实例,因为您创建了它:

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创建存根。

注意未显示保存片段中搜索条的值。将搜索栏初始化为片段中保存的值。对于长类名称感到抱歉,但如果你有一些片段接口要处理活动,那么长类和方法名称确实很有帮助。