2016-03-30 17 views
0

Açıklamamda, bazı LinearLayout'lu Fragman var (örneğin, kimlik LL1'dir). LL1 arka plan rengini nasıl değiştirebilirim? Fragment.java içinde OnCreate içinde: Ben sharedpreferences (alfa ve renk iki değer var): bunu yapmak istiyorumFragmandaki rengi değiştirme

SharedPreferences pref = this.getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE); 
getView().findViewById(R.id.LL1).setBackgroundColor(Color.parseColor(pref.getString(TRANSP_KEY, "#CC") + pref.getString(FCOLOR_KEY, "5556FF"))); 

hatalar yoktur ama başlatmaya çalıştığınızda uygulama:

Unfortunately application has stopped 

denedim:

LinearLayout LL= (LinearLayout) getView().findViewById(R.id.LL1); 
LL.setBackgroundColor(Color.WHITE); 

ama aynı sorun var

Muhtemelen setbackground işe yaramazsa, uygulama kaldırılmışsa ancak varsayılan renkler varsa (xml dosyasından).

Neyi yanlış yapıyorum?

fragment.java:

package com.hgyghyfghyu.apkana40; 


import android.content.Context; 
import android.content.SharedPreferences; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.LinearLayout; 

import static com.hgyghyfghyu.apkana40.AppData.FCOLOR_KEY; 
import static com.hgyghyfghyu.apkana40.AppData.TRANSP_KEY; 
import static com.hgyghyfghyu.apkana40.AppData.prefdata; 
import static com.hgyghyfghyu.apkana40.UserData.editor; 
import static com.hgyghyfghyu.apkana40.UserData.pref; 


/** 
* A simple {@link Fragment} subclass. 
*/ 
public class TrainerMenu extends Fragment { 


    public TrainerMenu() { 
     // Required empty public constructor 
    } 


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

     SharedPreferences pref = this.getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE); 

     LinearLayout imageView = (LinearLayout) getView().findViewById(R.id.trainermenutrainersbtn); 
     imageView.setBackgroundColor(Color.WHITE); 
     // getView().findViewById(R.id.trainermenuadbtn).setBackgroundColor(Color.parseColor(pref.getString(TRANSP_KEY, "#CC") + pref.getString(FCOLOR_KEY, "33777F"))); 

     //getView().findViewById(R.id.trainermenusettingsbtn).setBackgroundColor(Color.parseColor(pref.getString(TRANSP_KEY, "#CC") + pref.getString(FCOLOR_KEY, "5556FF"))); 
     // getView().findViewById(R.id.trainermenuinfobtn).setBackgroundColor(Color.parseColor(pref.getString(TRANSP_KEY, "#CC") + pref.getString(FCOLOR_KEY, "5556FF"))); 
     //getView().findViewById(R.id.trainermenugroupsbtn).setBackgroundColor(Color.parseColor(pref.getString(TRANSP_KEY, "#CC") + pref.getString(FCOLOR_KEY, "5556FF"))); 


     // Inflate the layout for this fragment 
     return inflater.inflate(R.layout.fragment_trainer_menu, container, false); 
    } 

} 
+1

olmalıdır hataları uygulama durdurdu bkz geçerli: Aşağıdaki onViewCreated() olarak bu yaklaşan bir yolu onCreateView() hemen sonra denilmektedir. –

+0

Nerede kontrol edebilirim? hata ayıklama başarılı – littlewombat

+0

Sadece bir yığın izleme olmadan kodunuzdan gidiyor, ben sadece (i) 'LL'nin 'setBackgroundColor()' çagırmadan önce 'LL'nin' null' olmadığından emin olmak için kontrol edebilirim ve (ii) emin ol onCreateView() 'dan sonra getView()' yi çağırıyorsunuz * (*): * Aslında, (ii) noktasında sorun olabilir, çünkü yukarıdaki kodu 'onCreate() 'de çalıştırmaya çalıştığınızı söylüyorsunuz ...bu noktada, 'getView()' 'null'ı döndürecek – PPartisan

cevap

1

ben Fragment OnCreate içinde bunu yapmak istiyorum:

Eh, bunu yapamazsınız. getView(), Görünüm oluşturulmadığı için onCreate'un içine boş bir görünüm döndürecektir.

sizin Fragment için düzen XML şişirme sonra onCreateView kodu taşımak ve belgelerine gelen aktaran kodu

View v = inflater.inflate(R.layout.fragment_trainer_menu, container, false); 
v.findViewById... 
return v; 
+0

Çok teşekkür ederim – littlewombat

0

yılında getView()

kullanmak yerine şişirildi View findViewById kullanın getView() yöntemi:

public View getView()

Sağlanmışsa, parçanın düzeninin ( onCreateView(LayoutInflater, ViewGroup, Bundle) tarafından döndürülen) kök görünümünü alın.

İade Görünümü Parçanın kök görünümünü veya düzen yoksa null değerini görüntüler. Eğer onCreateView() :) önce getView() ile Fragment düzenini erişmeye çalışırsanız

Yani, alışkanlık çalışır.

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.fragment_trainer_menu, container, false); 
} 

@Override 
public void onViewCreated (View view, Bundle savedInstanceState) { 

    SharedPreferences pref = this.getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE); 

    LinearLayout imageView = (LinearLayout) view.findViewById(R.id.trainermenutrainersbtn); 
    imageView.setBackgroundColor(Color.WHITE); 
} 
İlgili konular