2012-07-27 27 views
20

मैंने एक टुकड़े के पृष्ठभूमि रंग को बदलने की कोशिश की, लेकिन एक छोटी सी समस्या हुई।एंड्रॉइड: पृष्ठभूमि बदलें रंग का रंग

public class MainActivity extends FragmentActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 
} 

तो, ऊपर दिखाए गए कोड मैं अपने मुख्य वर्ग है कि टुकड़ा के लिए एक्सएमएल फ़ाइल कॉल के लिए था।

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" > 

    <fragment 
     android:id="@+id/fragment1" 
     android:name="com.northreal.practice.FirstFragment" 
     android:layout_width="0dip" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:background="#CBA" /> 

</LinearLayout> 

ऊपर main.xml लेआउट है कि मुख्य वर्ग (MainActivity) द्वारा कहा जाता है।

public class FirstFragment extends Fragment { 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, 
      Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.main, parent, false); 
    } 
} 

से ऊपर टुकड़ा के साथ एक्सएमएल फ़ाइल इस वर्ग के लिए कहता है।

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" 
    > 

    <TextView 
     android:id="@+id/tv" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="BLAHHHH" 
     android:layout_gravity="center_vertical" /> 

</LinearLayout> 

यह लेआउट ऊपर वर्ग FirstFragment

तो द्वारा फुलाया जाता है, क्यों नहीं यह वास्तव में मेरे टुकड़ा की पृष्ठभूमि का रंग बदल जाता है?

उत्तर

32

टुकड़े देखें से विरासत में नहीं आता है और इस तरह एक सेट पृष्ठभूमि विधि नहीं है।

कोई आसान ठीक इसकी पृष्ठभूमि

fragment.getView().setBackgroundColor(Color.WHITE); 
+2

धन्यवाद कि मेरी समस्या हल, लेकिन इसके बजाय:

Fragment fragment = (Fragment) getFragmentManager().findFragmentById(R.id.fragmentId); 

बदलें यह पृष्ठभूमि की तरह है getView() का उपयोग मैंने getRootView(): fragment.getRootView() सेट किया है। सेटबैकग्राउंड रंग (रंग। व्हाइट); – zarej

+0

जब मैं इसे वरीयता फ़्रेगमेंट = एस पर कोशिश करता हूं तो मुझे NullPointerException मिल रहा है – Solace

7

कारण यह काम नहीं करता है क्योंकि खंड को गतिविधि के समान माना जाता है। यह एक कंटेनर है जो मुख्य गतिविधि का बच्चा है, और अन्य वस्तुओं को प्रदर्शित करने के लिए प्रयोग किया जाता है।

आपको एंड्रॉइड: पृष्ठभूमि = "# सीबीए" को वास्तविक लेआउट में रखना होगा जिसमें टेक्स्ट व्यू है और न कि खंड खुद ही है। तो जैसा:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#CBA" 
    android:orientation="horizontal" > 

    <TextView 
     android:id="@+id/tv" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_vertical" 
     android:text="BLAHHHH" /> 
</LinearLayout> 
+1

इस पूरी गतिविधि पर लागू होंगे न कि किसी विशिष्ट टुकड़ा –

0

मैं एक ही समस्या का सामना करना पड़ा है सेट सिर्फ टुकड़ा की grab the root view करने के लिए और है, लेकिन मेरी आवश्यकता सेट या टुकड़ा की पृष्ठभूमि drawable छवि बदलने के लिए किया गया था। जैसा कि एडम ने उत्तर दिया है, दृष्टिकोण सही है और मैं टुकड़े से गतिविधि तक कनेक्शन दिखाना चाहता हूं।

Connector connector = (Connector) getActivity(); 
connector.setIt(this); 
अपनी गतिविधि जो 'कनेक्टर' इंटरफ़ेस को लागू होगा और विधि में

तब:

सबसे अच्छा अभ्यास अपने टुकड़ा से एक इंटरफेस 'कनेक्टर' नाम (या किसी भी नाम) तो फिर उपयोग करने के लिए है।

@Override 
public void setIt(Fragment fragment){ 
    FirstFragment firstFrag = (FirstFragment) getSupportFragmentManager().findFragmentByTag("first"); 
    firstFrag.getView().setBackgroundDrawable(getResources().getDrawable(R.drawable.app_background)); 
    //or for color set 
    firstFrag.getView().setBackgroundColor(Color.WHITE); 
} 
0

हो जाओ की तरह टुकड़ा वस्तु:

fragment.getView().setBackgroundColor(Color.WHITE); 
संबंधित मुद्दे