2017-01-17 11 views
0

Activityには、赤色、緑色、青色の3種類があり、fragmentという3種類のアプリがあります。 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; 
} 
} 
関連する問題