在一个活动中选中Android复选框,然后在另一个活动中出现按钮

8
问题已经说明了一切。假设有两个活动,“活动A”和“活动B”。当“活动A”中的复选框被选中时,“活动B”上应该显示一个按钮;当它未被选中时,应该在“活动B”上隐藏该按钮。
以下是主要活动:
    public class MainActivity extends ActionBarActivity {

    private BubblesManager bubblesManager;
    private boolean isCheckedValue;


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

        initializeBubblesManager();


        final Button add = (Button) findViewById(R.id.add);
        add.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                addNewBubble();
                add.setEnabled(false);
            }
        });

        CheckBox checkBox = (CheckBox)findViewById(R.id.add_fb);
        checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                isCheckedValue = isChecked;

                Intent intent = new Intent(MainActivity.this, PopUpWindow.class);
                intent.putExtra("yourBoolName", isCheckedValue );


            }
        });



    }
 private void addNewBubble() {
        BubbleLayout bubbleView = (BubbleLayout)LayoutInflater.from(MainActivity.this).inflate(R.layout.bubble_layout, null);
        bubbleView.setOnBubbleRemoveListener(new BubbleLayout.OnBubbleRemoveListener() {
            @Override
            public void onBubbleRemoved(BubbleLayout bubble) {
                finish();
                System.exit(0);
            }
        });
        bubbleView.setOnBubbleClickListener(new BubbleLayout.OnBubbleClickListener() {

            @Override
            public void onBubbleClick(BubbleLayout bubble) {
                Intent in = new Intent(MainActivity.this, PopUpWindow.class);
                startActivity(in);
            }
        });
        bubbleView.setShouldStickToWall(true);
        bubblesManager.addBubble(bubbleView, 60, 20);
    }

下面是下一个活动,也就是“B活动”。
public class PopUpWindow extends Activity {

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


    DisplayMetrics dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);

    int width = dm.widthPixels;
    int height = dm.heightPixels;

    getWindow().setLayout((int)(width*.8),(int)(height*.6));

    Boolean yourBool = getIntent().getBooleanExtra("yourBoolName",false);
    Button fbbutton1 = (Button)findViewById(R.id.fbbutton1);
    if(yourBool){
            //For Displaying Button
        fbbutton1.setVisibility(View.VISIBLE);
    }


}

以下是当复选框被点击时我想显示的按钮的XML代码。
<Button
        android:visibility="gone"
        android:id="@+id/fbbutton1"
        android:onClick="button"
        android:background="@drawable/fbcircle"
        android:layout_width="50dp"
        android:layout_height="50dp" />

我看不出与代码相关的任何问题,有可能是您在代码中进行了一些更改,而您的 IDE 只是提供了您项目的旧版本,请尝试清理并运行或清理项目并运行您的应用程序。 - Pavneet_Singh
@PavneetSingh兄弟,应用程序没有错误。即使在“Activity A”中的复选框未被点击,但“Activity B”中的按钮仍然出现了问题,我不知道出了什么问题。 - Gladwin James
这段代码毫无意义。你将yourBoolName的值存储在一个intent中,却使用另一个intent启动你的活动。当然不会起作用。 - Shaishav Jogani
4个回答

3
在B活动中,使用意图包发送布尔值。如果为true,则显示按钮;否则隐藏它。
 //global value
    private boolean isCheckedValue;


    CheckBox checkBox = (CheckBox)findViewById(R.id.chkbox1);
            checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

    isCheckedValue = isChecked; //first set value then assign to boolean extra.

Intent intent = new Intent(MainActivity.this, PopUpWindow.class);
            intent.putExtra("yourBoolName", isCheckedValue );
            startActivity(intent);



                }
            });
        }

使用意图发送

Intent intent = new Intent(this, AcitivityB.class);
intent.putExtra("yourBoolName", isCheckedValue );
startActivity(intent)

在Activity B中处理此事

Boolean yourBool = getIntent().getExtras().getBoolean("yourBoolName");

if(yourBool){
//display button
}
else{
//hide button
}

我刚刚编辑了完整的代码并更新了上面的内容,请您再检查一遍,因为我所做的更改中存在一个错误。 - Gladwin James
你正在将 isCheckvalue 设置为 bundle,然后向其设置值。请查看我的更新回答。@GladwinJames - KDeogharkar
java.lang.RuntimeException: 无法启动活动 ComponentInfo{com.txusballesteros.bubbles/com.txusballesteros.bubbles.PopUpWindow}: java.lang.NullPointerException: 尝试在空对象引用上调用虚拟方法'boolean android.os.Bundle.getBoolean(java.lang.String)' 兄弟,这个错误还在那里 :'( @KDeogharkar - Gladwin James
感谢您的支持,兄弟。只有在您的帮助下,我才找到了错误并解决了它。非常感谢您的支持 :)。 - Gladwin James
请问您能否检查一下代码,因为它的运行结果与预期不符。@KDeogharkar - Gladwin James
我在“Activity B”编写的处理复选框的代码是否正确,@KDeogharkar? - Gladwin James

3
public class MainActivity extends ActionBarActivity {
private BubblesManager bubblesManager;
private boolean isCheckedValue;


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

    initializeBubblesManager();


    final Button add = (Button) findViewById(R.id.add);
    add.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            addNewBubble();
            add.setEnabled(false);
        }
    });

    CheckBox checkBox = (CheckBox)findViewById(R.id.add_fb);
    checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

            isCheckedValue = isChecked;
// un-comment this code if you want to go to second activity when check change 
//
//                Intent intent = new Intent(MainActivity.this, PopUpWindow.class);
//                intent.putExtra("yourBoolName", isCheckedValue );
//  startActivity(intent);
        }
    });

}
 private void addNewBubble() {
        BubbleLayout bubbleView = (BubbleLayout)LayoutInflater.from(MainActivity.this).inflate(R.layout.bubble_layout, null);
        bubbleView.setOnBubbleRemoveListener(new BubbleLayout.OnBubbleRemoveListener() {
            @Override
            public void onBubbleRemoved(BubbleLayout bubble) {
                finish();
                System.exit(0);
            }
        });
        bubbleView.setOnBubbleClickListener(new BubbleLayout.OnBubbleClickListener() {

            @Override
            public void onBubbleClick(BubbleLayout bubble) {
                Intent in = new Intent(MainActivity.this, PopUpWindow.class);
            in.putExtra("yourBoolName", isCheckedValue );
                startActivity(in);
            }
        });
        bubbleView.setShouldStickToWall(true);
        bubblesManager.addBubble(bubbleView, 60, 20);
    }
}


   public class PopUpWindow extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

setContentView(R.layout.activity_pop_up_window);


DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);

int width = dm.widthPixels;
int height = dm.heightPixels;

getWindow().setLayout((int)(width*.8),(int)(height*.6));

Boolean yourBool = getIntent().getBooleanExtra("yourBoolName",false);
Button fbbutton1 = (Button)findViewById(R.id.fbbutton1);
if(yourBool){
        //For Displaying Button
    fbbutton1.setVisibility(View.VISIBLE);
    }


}
}

兄弟,我之前尝试过这个逻辑,但它并没有真正起作用。既然你已经上传了,我也尝试了,但仍然无法正常工作。问题很小,但我不知道它在哪里@PavneetSighn,我在xml中添加了android:visibility="gone",这会影响代码吗? - Gladwin James
请告诉我您的代码当前的行为以及其中存在的问题。 - Pavneet_Singh
兄弟,我也通过addNewBubble()打开了“Activity B”(我在代码的其他部分声明了打开“Activity B”的意图)。现在我已经将addNewBubble()代码部分添加到上述程序中。@PavneetSingh - Gladwin James
1
我基本上已经为您提供了从复选框侦听器启动活动的解决方案,但后来您说您也从其他地方启动活动,而且之前没有那段代码。问题非常微小,因此为了快速解决它,您只需要告诉我您想要什么以及当前代码的行为,并确保更新的代码与问题相关。请告诉我这些内容。 - Pavneet_Singh
尝试使用更新的代码,如果有任何问题,请回答之前评论中的问题。 - Pavneet_Singh
显示剩余6条评论

1
将您的活动“A”更改为以下内容:
public class MainActivity extends ActionBarActivity {

private BubblesManager bubblesManager;
private boolean isCheckedValue;
private Intent intent;

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

    initializeBubblesManager();


    final Button add = (Button) findViewById(R.id.add);
    add.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            addNewBubble();
            add.setEnabled(false);
        }
    });
    intent = new Intent(MainActivity.this, PopUpWindow.class);
    CheckBox checkBox = (CheckBox)findViewById(R.id.add_fb);
    checkBox.setOnCheckedChangeListener  (newCompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

            isCheckedValue = isChecked;


            intent.putExtra("yourBoolName", isCheckedValue );


        }
    });



}
  private void addNewBubble() {
    BubbleLayout bubbleView = (BubbleLayout)LayoutInflater.from(MainActivity.this).inflate(R.layout.bubble_layout, null);
    bubbleView.setOnBubbleRemoveListener(new BubbleLayout.OnBubbleRemoveListener() {
        @Override
        public void onBubbleRemoved(BubbleLayout bubble) {
            finish();
            System.exit(0);
        }
    });
    bubbleView.setOnBubbleClickListener(new BubbleLayout.OnBubbleClickListener() {

        @Override
        public void onBubbleClick(BubbleLayout bubble) {

            startActivity(intent);
        }
    });
    bubbleView.setShouldStickToWall(true);
    bubblesManager.addBubble(bubbleView, 60, 20);
}

在Activity 'B'中获得捆绑额外价值。
 boolean checkedStatus= getIntent().getBooleanExtra("yourBoolName",false);
 if(checkedStatus){
  // Do your job here
 }else{
 }

0

在保存复选框的状态时,使用“Activity A”的布尔值isChecked,并将其传递到“Activity B”,通过使用该布尔值,在“Activity B”中设置视图的可见性。


我刚刚编辑了完整的代码并更新了上面的内容,请您再检查一遍,因为我所做的更改中存在错误。@Hardik Kubavat - Gladwin James
在调用Intent之前,将值分配给变量:“isCheckedValue = isChecked;”。 - Hardik Kubavat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接