在我的应用程序中,片段包含一些LinearLayout(例如id为LL1)。如何更改LL1背景颜色? 我想通过Fragment.java中的OnCreate中的sharedpreferences(有两个值:alpha和color)来实现它:
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
我试过了:
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);
}
}
答案 0 :(得分:1)
我想在片段中的OnCreate中执行此操作:
嗯,你不能。 getView()
将在onCreate
内返回空视图,因为尚未创建视图。
请在为片段的布局XML膨胀后将代码移至onCreateView
,并在已膨胀的视图上使用findViewById
,而不是使用getView()
代码
View v = inflater.inflate(R.layout.fragment_trainer_menu, container, false);
v.findViewById...
return v;
答案 1 :(得分:0)
引用getView()
方法的文档:
public View getView ()
获取片段布局的根视图(返回的布局)
onCreateView(LayoutInflater, ViewGroup, Bundle)
),如果提供的话。返回视图片段的根视图,如果没有布局,则返回null。
因此,如果您尝试在getView()
:)之前使用onCreateView()
访问Fragment的布局,它将无法工作。以下是接近此问题的一种方法,因为在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);
}