Android设置颜色

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) 
+0

在哪个文件中调用changecolor()? – Pooya

+0

'mainavatarbck'和'mainnamebck'是Textview或LinearLayouts? –

+0

@jankigadhiya mainavaterbck和mainnamebck是MainActivity中的LinearLayouts – littlewombat

如果崩溃发生在changecolors()的第一行,那很可能是因为this.getActivity()返回null。

确保您在onAttach()之中或之后致电getActivity(),否则将返回空值。 fragment尚未与该活动相关联。

+0

你是对的,问题在这一行:getView()。findViewById(R.id.mainavatarbck).setBackgroundColor(Color.parseColor(prefdata.getString(TRANSP_KEY,“#CC”)+ prefdata.getString(FCOLOR_KEY,“33777F “)));我应该在哪里使用onAttach()? – littlewombat

+0

@Aditya我在对话框中使用它,而不是在片段中(但通过单击片段中的按钮打开对话框) – littlewombat

R.id.mainavatarbckR.id.mainnamebck在片段的布局中找不到,这就是为什么getView().findViewById()返回null。试试这个吧 -

根据你的问题,我假设带有这2个ID的视图是你活动布局的一部分。将您的changecolors()方法中的代码更改为 -

getActivity().findViewById(R.id.mainavatarbck)...