返回视图后,复选框变得多余

时间:2016-08-28 20:55:24

标签: android listview checkbox view

我正在尝试在我的主页上设置一个复选框,选中该复选框后,应该转到另一个视图,否则,会在同一视图中显示错误消息。

这只是第一次正常工作。如果未选中,则显示错误,如果选中,则呈现下一个视图。

然而,当我使用后退按钮返回此主页时,此时复选框变得多余。即使取消选中,也能正确呈现下一页。

如果我删除了ViewGroup的所有视图,它将永久删除它们,并且一旦我返回它,主页就会为空。 我相信每次返回视图时都需要重置复选框。 但是,我无法做同样的事情。

请在下面找到我的代码(我是Android开发的初学者):

public class MainActivity extends AppCompatActivity {
    public static final String EXTRA_MESSAGE="com.android.AI";
    public boolean isCheckBoxClicked=false;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    //isChecked is the onClick attribute for checkbox in the main.xml here
    public void isChecked(View view){
        boolean isChecked = ((CheckBox) view).isChecked();
        if(isChecked){
            isCheckBoxClicked = true;
        } else {
            isCheckBoxClicked = false;
        }
    }
    //Send message is onClick for a submit button
    public void sendMessage(View view){
        if(isCheckBoxClicked) {
            Intent intent = new Intent(this, SeniorTeam.class);
            startActivity(intent);
        } else {
            TextView acceptTerms = new TextView(this);
            acceptTerms.setTextSize(15);
            acceptTerms.setText("Please accpet terms and conditions before proceeding");
            ViewGroup terms = (ViewGroup) findViewById(R.id.activity_main);
            terms.addView(acceptTerms);
        }
    }
}

2 个答案:

答案 0 :(得分:0)

据我所知,您不需要使用后退按钮返回,是吗?

如果你没有2个解决方案

简单:
如果

,请将此行添加到您的最后一行
this.finish();

所以你的活动应该是这样的:

    public class MainActivity extends AppCompatActivity {
public static final String EXTRA_MESSAGE="com.android.AI";
public boolean isCheckBoxClicked=false;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}
    //isChecked is the onClick attribute for checkbox in the main.xml here
public void isChecked(View view){
    boolean isChecked= ((CheckBox) view).isChecked();
    if(isChecked){
        isCheckBoxClicked=true;
    }
    else{
        isCheckBoxClicked=false;
    }
}
//Send message is onClick for a submit button
public void sendMessage(View view){
    if(isCheckBoxClicked) {
        Intent intent = new Intent(this, SeniorTeam.class);
        startActivity(intent);
        this.finish();
    }
    else {
        TextView acceptTerms = new TextView(this);
        acceptTerms.setTextSize(15);
        acceptTerms.setText("Please accpet terms and conditions before proceeding");
       ViewGroup terms = (ViewGroup) findViewById(R.id.activity_main);
        terms.addView(acceptTerms);
    }
}

有点复杂: 如果您使用第一种方法,按下将实际上将用户踢出您的应用程序,因此如果您需要,您可以在下一个活动中按下该方法时覆盖该方法,以便将此代码添加到您的NEXT活动中(SeniorTeam。类)

@Override
public void onBackPressed(){
//custom actions here leave blank to render back useless
}

答案 1 :(得分:0)

您应该完全删除isCheckBoxClicked变量isChecked函数(并从属性中删除它)。在sendMessage函数中,只需调用((CheckBox)findViewById(id)).isChecked()而不是isCheckBoxClicked 你编码的方式,变量和UI之间的连接空间太大。没有必要。