在Android中更改两个活动时的按钮背景

在Android中更改两个活动时的按钮背景,android,button,android-activity,Android,Button,Android Activity,我已经寻找了很多方法来做到这一点,但没有运气 我有两个活动,活动1有两个按钮,活动2有一个按钮,我想当我点击活动2中的按钮时,让活动1中的第一个按钮改变它的背景 可能吗 非常感谢 这里是活动1 public class MainActivity extends ActionBarActivity { private Vibrator myVib; Intent receive = null; String bg_color; String text_color; Button Q1; @Ove

我已经寻找了很多方法来做到这一点,但没有运气

我有两个活动,活动1有两个按钮,活动2有一个按钮,我想当我点击活动2中的按钮时,让活动1中的第一个按钮改变它的背景

可能吗

非常感谢

这里是活动1

public class MainActivity extends ActionBarActivity {
private Vibrator myVib;
Intent receive = null;
String bg_color;
String text_color;
Button Q1;

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

    myVib = (Vibrator) this.getSystemService(VIBRATOR_SERVICE);
    receive = getIntent();
    bg_color = receive.getStringExtra("bg_color");
     Q1 = (Button) findViewById(R.id.button1);
    Button Q2 = (Button) findViewById(R.id.button2);


    Q1.setOnClickListener(new OnClickListener() {
        public void onClick(View view) {
            Intent myIntent = new Intent(MainActivity.this, Q01.class);
            MainActivity.this.startActivity(myIntent);
            myIntent.putExtra("bg_color", "#333333");
            myIntent.putExtra("text_color", "#cccccc");
            myVib.vibrate(50);
        }
    });

    Q2.setOnClickListener(new OnClickListener() {
        public void onClick(View view) {
            Intent myIntent = new Intent(MainActivity.this, Q02.class);
            MainActivity.this.startActivity(myIntent);
            myVib.vibrate(50);
        }
    });


}

public void receiveColor() {

    if (bg_color != null && text_color != null) {
        q1.setBackgroundColor(Color.parseColor(bg_color));

    }

}

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    receiveColor();

}

}
下面是我的Q01活动(第二个)

}

这里的catlog
06-1023:45:21.164:E/AndroidRuntime(9506):致命异常:main
06-10 23:45:21.164:E/AndroidRuntime(9506):进程:com.example.quick,PID:9506
06-10 23:45:21.164:E/AndroidRuntime(9506):java.lang.RuntimeException:无法恢复活动{com.example.quick/com.example.quick.q01}:java.lang.NullPointerException
06-10 23:45:21.164:E/AndroidRuntime(9506):在android.app.ActivityThread.performResumeActivity(ActivityThread.java:2788)
06-10 23:45:21.164:E/AndroidRuntime(9506):位于android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2817)
06-10 23:45:21.164:E/AndroidRuntime(9506):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2250)
06-10 23:45:21.164:E/AndroidRuntime(9506):在android.app.ActivityThread.access$800(ActivityThread.java:135)
06-10 23:45:21.164:E/AndroidRuntime(9506):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
06-10 23:45:21.164:E/AndroidRuntime(9506):在android.os.Handler.dispatchMessage(Handler.java:102)上
06-10 23:45:21.164:E/AndroidRuntime(9506):在android.os.Looper.loop(Looper.java:136)
06-10 23:45:21.164:E/AndroidRuntime(9506):位于android.app.ActivityThread.main(ActivityThread.java:5017)
06-10 23:45:21.164:E/AndroidRuntime(9506):位于java.lang.reflect.Method.Invokenactive(本机方法)
06-10 23:45:21.164:E/AndroidRuntime(9506):在java.lang.reflect.Method.invoke(Method.java:515)
06-10 23:45:21.164:E/AndroidRuntime(9506):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
06-10 23:45:21.164:E/AndroidRuntime(9506):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
06-10 23:45:21.164:E/AndroidRuntime(9506):在dalvik.system.NativeStart.main(本机方法)
06-10 23:45:21.164:E/AndroidRuntime(9506):由以下原因引起:java.lang.NullPointerException
06-10 23:45:21.164:E/AndroidRuntime(9506):在android.graphics.Color.parseColor(Color.java:209)
06-10 23:45:21.164:E/AndroidRuntime(9506):在com.example.cahllenge.Day01.ReceiveColor(q01.java:80)
06-10 23:45:21.164:E/AndroidRuntime(9506):在com.example.cahllenge.Day01.onResume(q01.java:90)
06-10 23:45:21.164:E/AndroidRuntime(9506):在android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1192)上
06-10 23:45:21.164:E/AndroidRuntime(9506):在android.app.Activity.performResume(Activity.java:5310)上
06-10 23:45:21.164:E/AndroidRuntime(9506):在android.app.ActivityThread.performResumeActivity(ActivityThread.java:2778)

示例

static int color=1;
 btn1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {


                Intent i = new Intent(MainActivity.this,Second.class); 
                i.putExtra("color", color);
                startActivity(i);

            }
        });
然后在第二

int color2;
color2= intent.getIntExtra("color", color2);

 if(color2==1);
// change button color

从您的第一个活动开始:

btn1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent i = new Intent(MainActivity.this, SecondActivity.class);
                i.putExtra("bg_color", "#333333");
                i.putExtra("text_color", "#cccccc");
                startActivity(i);

            }
        });
public void ReceiveColor(){

        receiveColorIntent = getIntent();
        if(receiveColorIntent!=null){
        String bg_color = receiveColorIntent.getStringExtra("bg_color");
        String text_color = receiveColorIntent.getStringExtra("text_color");
        btn1.setBackgroundColor(Color.parseColor(bg_color));
        btn1.setTextColor(Color.parseColor(text_color));
        }

    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        ReceiveColor();

    }
点击按钮:

btn1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent i = new Intent(MainActivity.this, SecondActivity.class);
                i.putExtra("bg_color", "#333333");
                i.putExtra("text_color", "#cccccc");
                startActivity(i);

            }
        });
public void ReceiveColor(){

        receiveColorIntent = getIntent();
        if(receiveColorIntent!=null){
        String bg_color = receiveColorIntent.getStringExtra("bg_color");
        String text_color = receiveColorIntent.getStringExtra("text_color");
        btn1.setBackgroundColor(Color.parseColor(bg_color));
        btn1.setTextColor(Color.parseColor(text_color));
        }

    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        ReceiveColor();

    }
关于第二个活动:

btn1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent i = new Intent(MainActivity.this, SecondActivity.class);
                i.putExtra("bg_color", "#333333");
                i.putExtra("text_color", "#cccccc");
                startActivity(i);

            }
        });
public void ReceiveColor(){

        receiveColorIntent = getIntent();
        if(receiveColorIntent!=null){
        String bg_color = receiveColorIntent.getStringExtra("bg_color");
        String text_color = receiveColorIntent.getStringExtra("text_color");
        btn1.setBackgroundColor(Color.parseColor(bg_color));
        btn1.setTextColor(Color.parseColor(text_color));
        }

    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        ReceiveColor();

    }

下面是它的完整代码:

1)您的主要活动,您将在其中进行第二项活动:

public class MainActivity extends Activity {

    Intent receive = null;
    Button btn1;
    Button btn2;
    String bg_color;
    String text_color;

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

        receive = getIntent();
        bg_color = receive.getStringExtra("bg_color");
        text_color = receive.getStringExtra("text_color");

        btn1 = (Button) findViewById(R.id.button1);
        btn2 = (Button) findViewById(R.id.button2);

        btn1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent i = new Intent(MainActivity.this, SecondActivity.class);
                i.putExtra("bg_color", "#333333");
                i.putExtra("text_color", "#cccccc");
                startActivity(i);

            }
        });

    }

    public void receiveColor() {

        if (bg_color != null && text_color != null) {
            btn2.setBackgroundColor(Color.parseColor(bg_color));
            btn2.setTextColor(Color.parseColor("#cccccc"));
        }

    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        receiveColor();

    }

}
public class SecondActivity extends Activity {

    Button btn1;
    Intent receiveColorIntent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.secondlayout);

        btn1 = (Button) findViewById(R.id.sbutton1);

        btn1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent i = new Intent(SecondActivity.this, MainActivity.class);
                i.putExtra("bg_color", "#333333");
                i.putExtra("text_color", "#ccc");
                startActivity(i);

            }
        });

    }

    public void ReceiveColor() {

        receiveColorIntent = getIntent();
        if (receiveColorIntent != null) {
            String bg_color = receiveColorIntent.getStringExtra("bg_color");
            String text_color = receiveColorIntent.getStringExtra("text_color");
            btn1.setBackgroundColor(Color.parseColor(bg_color));
            btn1.setTextColor(Color.parseColor(text_color));
        }

    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        ReceiveColor();

    }

}
2)从第二个活动()开始:

我非常确定这是一个解决方案,它对我来说非常有效。你可以试试这个,看看它对你有用


至少你现在可以这样做。当然还有其他的解决办法。但是这对我来说很有效。:)

但是你不会看到它发生。。除非您使用intent extra启动活动,否则无法执行此操作。除非您想在“活动2”上单击按钮时看到“活动1”,只需单击“活动2”上的按钮,然后使用intent并将多余的作为整数(颜色的某些十六进制代码)传递给“活动1”,然后在“活动1”上单击onResume(),从activity2获取意图和先前创建的意图的结果,然后设置按钮背景。因此,基本上,当应用程序启动时,您的按钮不会发生任何变化,但在其他活动中单击按钮时,您的按钮背景会发生变化。如果我将Activity2中的按钮替换为复选框,会怎么样?如果是复选框,显然您不想进入上一个活动来检查颜色是否已更改。但是如果您想,请在选中复选框时启动活动,并传递您想要的值。我不想启动活动。我想做的是,当用户完成一个测验并单击OK时,在主活动中,它显示用户完成了测验a,依此类推。我在第二个活动中出错。receiveColorIntent无法解析为变量,因此..我编辑了我的帖子,并上传了完整的代码。我的朋友,这肯定有用。我已经试了10多次了。它每次都有效……)我已经用logcat把这个问题提出来了。它仍然不起作用吗?你也可以发布你的代码片段吗?