我想获取我的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");
}
}
答案 0 :(得分:0)
您使用错误的方式在片段与活动之间创建通信。
在您的活动和片段之间进行通信的正确方法是使用接口。
在configFragment
中定义一个界面,然后在您的活动中实施该界面。
做你想做的事。
Refer this
如果您想将此传递给您的主要活动,请将结果设置为configActivity
的主要活动。 Refer this one for starting activity for result
并且也通过这个链接。 Ho to use fragment