2017-01-17 124 views
0

我正在开发一个应用程序,其中主Activity有三个buttons红色,绿色和蓝色以及fragment。点击button时,fragment的颜色会变为button的相应颜色。我试图改变fragment onclick`的background color但我的应用程序崩溃,更改按钮上的片段颜色单击

public class MainActivity extends AppCompatActivity { 
Button b1,b2,b3; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    b1 = (Button) findViewById(R.id.button1); 
    b2 = (Button) findViewById(R.id.button2); 
    b3 = (Button) findViewById(R.id.button3); 

    b1.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      fragment1.rootView.setBackgroundColor(Color.RED); 
     } 
    }); 
    b2.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View arg0) { 
      fragment1.rootView.setBackgroundColor(Color.GREEN); 
     } 
    }); 
    b3.setOnClickListener(new View.OnClickListener(){ 
    public void onClick(View arg0) { 
    fragment1.rootView.setBackgroundColor(Color.BLUE); 
    } 
    }); 
    } 


    } 

logcat的:

01-17 13:27:02.976 17105-17105/com.example.shivadeeps.myapplication E/AndroidRuntime: FATAL EXCEPTION: main 
Process: com.example.shivadeeps.myapplication, PID: 17105 
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setBackgroundColor(int)' on a null object reference 
    at com.example.shivadeeps.myapplication.MainActivity$2.onClick(MainActivity.java:39) 
    at android.view.View.performClick(View.java:5246) 
    at android.widget.TextView.performClick(TextView.java:10565) 
    at android.view.View$PerformClick.run(View.java:21200) 
    at android.os.Handler.handleCallback(Handler.java:739) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:145) 
    at android.app.ActivityThread.main(ActivityThread.java:6946) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199) 

片段

public class fragment1 extends Fragment { 
    public static View rootView; 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.fragment1, container, false); 
    } 
} 
+0

什么错误? – ZeroOne

+0

'fragment1'在哪里? –

+0

以及片段1 – phoenixshiv

回答

0

为了简单起见,

将片段的android:background设置为在XML布局中以#AARRGGBB格式透明。即

android:background="#00000000" 

,并在MainActivity你onClick()事件,只是更改包含布局片段的背景色。即MainActivity

findViewById(R.id.root_layout).setBackgroundColor(Color.RED); 

这里root_layout是MainActivity的顶根级布局。您可以选择一个包含片段的布局,以在需要的位置生效。

在这种方法中,你没有对碎片做任何事情。

+0

谢谢你工作 – phoenixshiv

+0

我刚刚选择它 – phoenixshiv

0

你可以找到标签片段和根视图

Fragment fragmentManager = getFragmentManager().findFragmentByTag("fragment1"); 
     if (fragmentManager != null) { 
      fragmentManager.getView().getRootView().setBackgroundColor(getResources().getColor(R.color.colorPrimaryDark)); 
     } 
0

检查这个答案的设置颜色:

package com.example.shivadeeps.myapplication; 

import android.app.Fragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

import static android.R.attr.fragment; 

public class fragment1 extends Fragment { 
public static View rootView; 

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState) { 

rootView = inflater.inflate(R.layout.fragment1, container, false); 
return rootView; 
} 
}