【问题标题】:Get value of a checkbox in another fragment获取另一个片段中复选框的值
【发布时间】:2017-11-22 22:17:01
【问题描述】:

我想在我的 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");
    }



}

【问题讨论】:

  • 谁能给我解释一下,而不是对我投反对票...
  • 您需要为此创建接口,或者您可以使用共享首选项,或者您可以创建一个静态对象,当您关闭或终止应用程序时,其数据将被删除。
  • 你能告诉我怎么做吗?
  • 最简单的方法就是在你的活动中创建一个布尔对象,比如这个 public static boolean isChecked;现在您可以通过调用 youractivityname.isChecked 轻松访问此变量。

标签: android android-fragments checkbox


【解决方案1】:

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

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

也可以通过这个链接。 Ho to use fragment

【讨论】:

    猜你喜欢
    • 2022-01-20
    • 2017-11-19
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    • 2018-04-15
    相关资源
    最近更新 更多