获取另一个片段中的复选框的值

时间:2017-06-20 11:30:59

标签: android android-fragments checkbox

我想获取我的confiFragment中的复选框的值,并在MainActivity中获取该值。 configFragment与confiActivity相关。

我试过这个方法,但我得到一个null;有谁可以帮助我吗?

这是我的片段:

public class configFragment extends android.support.v4.app.Fragment {
    CheckBox check;
    configActivity cmt;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.config_layout, container, false);
        check = (CheckBox) rootView.findViewById(R.id.checkbox1);
        TextView text1=(TextView) rootView.findViewById(R.id.text1);
        text1.setText("hello ");

        cmt=(configActivity) getActivity();
        check.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(check.isChecked()){

                    Log.d("status","checked");
                    //check.setChecked(true);
                    cmt.checking=true;

                }else{
                    Log.d("status","not checked");
                    //check.setChecked(false);
                cmt.checking=false;
                }
            }
        });

        //cmt.checking=load();






        //  check();
        return rootView;
    }


    @Override
    public void onPause() {
        super.onPause();
        save(check.isChecked());
    }

    @Override
    public void onResume() {
        super.onResume();
        check.setChecked(load());
    }

    private void save(final boolean isChecked) {
        SharedPreferences sharedPreferences = getActivity().getPreferences(Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putBoolean("check", isChecked);
        editor.commit();
    }

    public boolean load() {
        SharedPreferences sharedPreferences = getActivity().getPreferences(Context.MODE_PRIVATE);
        return sharedPreferences.getBoolean("check", check.isChecked());
    }

}

这是这个片段的活动:

    public class configActivity extends SingleFragmentActivity {

    public Boolean checking;

    @Override
    protected Fragment createFragment()
    {
        return new configFragment();
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        configFragment cf=new configFragment();
        SharedPreferences sharedPreferences = this.getPreferences(Context.MODE_PRIVATE);
        checking=sharedPreferences.getBoolean("check", cf.check.isChecked());
    }
}

这是我的主要活动:

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    TextView hello=(TextView) findViewById(R.id.hello);
    Button but1=(Button) findViewById(R.id.button1);


    but1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i=new Intent(MainActivity.this,configActivity.class);
            startActivity(i);

        }
    });

    hello.setText("Hello world");
   configActivity config=new configActivity();
    Log.d("status of checking",config.checking.toString());
    if(config.checking=true){
        Log.d("checked","true");
    }else{
        Log.d("not checked","false");
    }



}

1 个答案:

答案 0 :(得分:0)

您使用错误的方式在片段与活动之间创建通信。 在您的活动和片段之间进行通信的正确方法是使用接口。 在configFragment中定义一个界面,然后在您的活动中实施该界面。 做你想做的事。 Refer this

如果您想将此传递给您的主要活动,请将结果设置为configActivity的主要活动。 Refer this one for starting activity for result

并且也通过这个链接。 Ho to use fragment