2016-03-30 7 views
0

私の対応では、一部のLinearLayoutで断片化されています(たとえば、IDはLL1です)。 LL1の背景色を変更するにはどうしたらいいですか?そこエラーはありませんが、私は、アプリケーションを起動しようとするとフラグメント内の色を変更してください

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"))); 

Unfortunately application has stopped 

Fragment.javaでのOnCreateイベントで:私はsharedpreferencesでそれをやりたい は(アルファおよびカラー2つの値を持ちます)私が試した:

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

が、同じ問題がある

おそらくsetbackgroundは機能しません。削除されたアプリケーションは動作しますが、xmlファイルのデフォルトの色があります。

私は間違っていますか?

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

アプリが停止した参照です。 –

+0

どこで確認できますか?デバッグが成功しました – littlewombat

+0

スタックトレースを使わずにコードからのみ実行すると、 'setBackgroundColor()'を呼び出す前に 'LL'が' null'でないことを確認し、(ii) onCreateView() 'の後に' getView() 'を呼び出す* Edit:*実際には、onCreate()で上記のコードを実行しようとしているように、実際には、この時点で 'getView()'は 'null'を返します – PPartisan

答えて

1

私は断片でOnCreate関数でそれをやってみたい:

まあ、することはできません。ビューが作成されていないため、getView()onCreateの内部でヌルビューを返します。

あなたのフラグメントのレイアウトXMLを膨張させた後、onCreateViewにコードを移動してのドキュメントからの引用コード

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

ありがとう – littlewombat

0

getView()

を使用する代わりに、膨張されたビューにfindViewByIdを使用してくださいgetView()方法:

public View getView()

フラグメントのレイアウト( onCreateView(LayoutInflater, ViewGroup, Bundle)から返されたもの)のルートビューを取得します(存在する場合)。

戻り値フラグメントのルートビュー。レイアウトがない場合はnullです。

onCreateView() :)の前にgetView()でフラグメントのレイアウトにアクセスしようとすると、動作しません。以下はonViewCreated()がすぐにonCreateView()後に呼び出されるとして、これを近づいての一つの方法である:エラーがあるはず

@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); 
} 
関連する問題