package com.gzsll.hupu.ui.setting; import android.app.Activity; import android.app.Dialog; import android.app.DialogFragment; import android.app.Fragment; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageView; import com.afollestad.materialdialogs.AlertDialogWrapper; import com.gzsll.hupu.R; import com.gzsll.hupu.injector.HasComponent; import com.gzsll.hupu.otto.ChangeThemeEvent; import com.gzsll.hupu.ui.BaseActivity; import com.gzsll.hupu.util.SettingPrefUtil; import com.gzsll.hupu.util.ThemeUtil; import com.squareup.otto.Bus; import java.util.HashMap; import java.util.Map; import javax.inject.Inject; /** * Created by sll on 2016/5/17. */ public class ColorsDialogFragment extends DialogFragment implements AdapterView.OnItemClickListener { public static void launch(Activity activity) { Fragment fragment = activity.getFragmentManager().findFragmentByTag("DialogFragment"); if (fragment != null) { activity.getFragmentManager().beginTransaction().remove(fragment).commit(); } ColorsDialogFragment dialogFragment = new ColorsDialogFragment(); dialogFragment.show(activity.getFragmentManager(), "DialogFragment"); } @Inject Bus mBus; private Map<String, ColorDrawable> colorMap = new HashMap<>(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SettingComponent.class.cast(((HasComponent<SettingComponent>) getActivity()).getComponent()) .inject(this); } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { setCancelable(true); View view = View.inflate(getActivity(), R.layout.dialog_md_colors, null); GridView gridView = (GridView) view.findViewById(R.id.grid); gridView.setAdapter(new MDColorsAdapter()); gridView.setOnItemClickListener(this); return new AlertDialogWrapper.Builder(getActivity()).setView(view) .setPositiveButton("取消", null) .create(); } class MDColorsAdapter extends BaseAdapter { @Override public int getCount() { return ThemeUtil.themeColorArr.length; } @Override public Object getItem(int position) { return ThemeUtil.themeColorArr[position]; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = View.inflate(getActivity(), R.layout.item_md_colors, null); } if (!colorMap.containsKey(String.valueOf(position))) { colorMap.put(String.valueOf(position), new ColorDrawable(getResources().getColor(ThemeUtil.themeColorArr[position][0]))); } ImageView imgColor = (ImageView) convertView.findViewById(R.id.ivColor); ColorDrawable colorDrawable = colorMap.get(String.valueOf(position)); imgColor.setImageDrawable(colorDrawable); View imgSelected = convertView.findViewById(R.id.ivSelected); imgSelected.setVisibility( SettingPrefUtil.getThemeIndex(getActivity()) == position ? View.VISIBLE : View.GONE); return convertView; } } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (position == SettingPrefUtil.getThemeIndex(getActivity())) { dismiss(); return; } SettingPrefUtil.setThemeIndex(getActivity(), position); dismiss(); mBus.post(new ChangeThemeEvent()); if (getActivity() instanceof BaseActivity) ((BaseActivity) getActivity()).reload(); } }