Android设置颜色
如何设置背景颜色从对话框(SettingsFColorDialod)到活动?有一个片段活动,其中一个片段的按钮打开对话框,在sharedpreferences中有一些用于更改颜色的按钮。它的工作原理,但只有当活动重新加载。Android设置颜色
我的对话框:
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.EditText;
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.editordata;
import static com.hgyghyfghyu.apkana40.AppData.prefdata;
// ...
public class SettingsFColorDialod extends DialogFragment {
public SettingsFColorDialod() {
}
public static SettingsFColorDialod newInstance(String title) {
SettingsFColorDialod frag = new SettingsFColorDialod();
Bundle args = new Bundle();
args.putString("Choose your color", title);
frag.setArguments(args);
return frag;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.settingsfcolordialog, container);
}
@Override
public void onViewCreated(final View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
prefdata = this.getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE);
editordata = prefdata.edit();
view.findViewById(R.id.FCOLOR1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
editordata.putString(FCOLOR_KEY,"FF9999").apply();
changecolors();
dismiss();
}
});
String title = getArguments().getString("Choose your color", "Choose your color");
getDialog().setTitle(title);
getDialog().getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
}
private void changecolors(){
prefdata = this.getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE);
getView().findViewById(R.id.mainavatarbck).setBackgroundColor(Color.parseColor(prefdata.getString(TRANSP_KEY, "#CC") + prefdata.getString(FCOLOR_KEY, "33777F")));
getView().findViewById(R.id.mainnamebck).setBackgroundColor(Color.parseColor(prefdata.getString(TRANSP_KEY, "#CC") + prefdata.getString(FCOLOR_KEY, "33777F")));
}
}
问题是“changecolors”,我试图创建一个不刷新此方法改变backgroundcolors但有错误(不幸的是应用程序已经停止),并从Android的显示器:
FATAL EXCEPTION: main
Process: com.hgyghyfghyu.apkana40, PID: 22743
java.lang.NullPointerException
at com.hgyghyfghyu.apkana40.SettingsFColorDialod.changecolors(SettingsFColorDialod.java:176)
at com.hgyghyfghyu.apkana40.SettingsFColorDialod.access$000(SettingsFColorDialod.java:23)
at com.hgyghyfghyu.apkana40.SettingsFColorDialod$16.onClick(SettingsFColorDialod.java:159)
at android.view.View.performClick(View.java:4438)
at android.view.View$PerformClick.run(View.java:18422)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5045)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
如果崩溃发生在changecolors()
的第一行,那很可能是因为this.getActivity()
返回null。
确保您在onAttach()
之中或之后致电getActivity()
,否则将返回空值。 fragment
尚未与该活动相关联。
你是对的,问题在这一行:getView()。findViewById(R.id.mainavatarbck).setBackgroundColor(Color.parseColor(prefdata.getString(TRANSP_KEY,“#CC”)+ prefdata.getString(FCOLOR_KEY,“33777F “)));我应该在哪里使用onAttach()? – littlewombat
@Aditya我在对话框中使用它,而不是在片段中(但通过单击片段中的按钮打开对话框) – littlewombat
R.id.mainavatarbck
和R.id.mainnamebck
在片段的布局中找不到,这就是为什么getView().findViewById()
返回null。试试这个吧 -
根据你的问题,我假设带有这2个ID的视图是你活动布局的一部分。将您的changecolors()
方法中的代码更改为 -
getActivity().findViewById(R.id.mainavatarbck)...
在哪个文件中调用changecolor()? – Pooya
'mainavatarbck'和'mainnamebck'是Textview或LinearLayouts? –
@jankigadhiya mainavaterbck和mainnamebck是MainActivity中的LinearLayouts – littlewombat