0

所以我正在制作我的第二个应用程序,我决定构建一个具有多个皮肤/图标集并且可以随机化主菜单按钮的菜单,我让一切正常,然后我开始开发介绍屏幕,该屏幕在用户首次使用 Dialog 启动应用程序时启动框,现在当用户选择不同的方案时,我的颜色会动态变化,效果很好,当用户来到框时,它会询问他们是否每次都要随机化菜单按钮的颜色:

如果我点击 Randomize 它确实会动态变化,但如果我勾选顺序然后它根本不会改变,我不明白。

我有 3 个主要文件:ConversePrefs.java,我不会发布它,因为我 100% 确定它是正确的,因为它只是一组用于获取共享首选项的快捷功能。

MainMenu.java - 主要活动/主菜单:

package com.arl.conversion;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;


import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.graphics.Color;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;

public class MainMenu extends Activity {
    private static final OnClickListener PreSetupsColor = null;
    final Context context = this;
    ColorCollections cc = new ColorCollections(context);

    List<String> colorList = null;
    int currentIndex = 0;

    public void LoadColorPalette(){
        ConversePrefs cp = new ConversePrefs(this);
        colorList = cc.GetColorList(cp.GetIntSetting("UsersColor", 0),cp.GetBolSetting("UsersRandomizer", false));
    }

    public void SetBtnColour(int btn){  
        Button bttn = (Button)findViewById(btn);
        bttn.setBackgroundColor(Color.parseColor(colorList.get(currentIndex))); 
        currentIndex++;
    }

    public void GenerateButtonsDefault(){
        ConversePrefs cp = new ConversePrefs(this);
        LoadColorPalette();
        SetBtnColour(R.id.DistanceBtn);
        SetBtnColour(R.id.VolumeBtn);
        SetBtnColour(R.id.AreaBtn);
        SetBtnColour(R.id.ClothingBtn);
        SetBtnColour(R.id.ElectricBtn);
        SetBtnColour(R.id.TempBtn);
        SetBtnColour(R.id.TimeBtn);
        SetBtnColour(R.id.MoneyBtn);
        SetBtnColour(R.id.SpeedBtn);
        SetBtnColour(R.id.MathBtn);
        SetBtnColour(R.id.CurrencyBtn);
        SetBtnColour(R.id.OptionsBtn);
    }

    public void RefreshMenu(){
        currentIndex = 0;
        GenerateButtonsDefault();
    }



//SECOND
    public void PreSetuposColor(final View v){
        final ConversePrefs cp = new ConversePrefs(this);
        String[] ColorSchemes = {"Windows 8", "Modern Urban"};
        new AlertDialog.Builder(this).
        setTitle("Color Scheme").
        setSingleChoiceItems(ColorSchemes, cp.GetIntSetting("UsersColor", 0), new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                cp.SetIntSetting("UsersColor", which);
                RefreshMenu();
            }
        }).
        setPositiveButton("Continue", new OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
                MainMenu.this.PreSetupRandoms(v);

            }
        }).setNeutralButton("Back", new OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
                MainMenu.this.PreSetupsWelcome(v);

            }
        }).setNegativeButton("Quit", new OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                System.exit(0);

            }
        }).setCancelable(false).show();
    }
// THIRD
    public void PreSetupRandoms(final View v){
        final ConversePrefs cp = new ConversePrefs(this);
        String[] FalseAndTrue = {"Sequential", "Randomize"};
        new AlertDialog.Builder(this).
        setTitle("Randomize Colors?").
        setSingleChoiceItems(FalseAndTrue, cp.GetBoolInt(cp.GetBolSetting("UsersRandomizer", false)), new OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                cp.SetBooleanSetting("UsersRandomizer", cp.GetIntBool(which));
                RefreshMenu();
            }
        }).setPositiveButton("Continue", new OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO

            }
        }).setNeutralButton("Back", new OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
                MainMenu.this.PreSetuposColor(v);

            }
        }).setNegativeButton("Quit", new OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                System.exit(0);

            }
        }).setCancelable(false).show();
    }
//FIRST
    public void PreSetupsWelcome(final View v){
        new AlertDialog.Builder(this).
        setTitle("Welcome").
        setMessage("It seems that this is the first time application was ran on this device, you will be now presented with app appearance setup of your own choice.").
        setPositiveButton("Continue", new OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
                MainMenu.this.PreSetuposColor(v);

            }
        }).
        setNegativeButton("Quit", new OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                System.exit(0);
            }
        }).
        setCancelable(false).show();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ConversePrefs cp = new ConversePrefs(this);
        //LoadColorPalette();
        setContentView(cc.GetTheme(cp.GetIntSetting("ThemeName", 0)));
        GenerateButtonsDefault();
        PreSetupsWelcome(new View(this));

    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main_menu, menu);
        return true;
    }

}

ColorCollections.java - 包含颜色信息/和一些检索功能的文件。

package com.arl.conversion;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import android.app.Application;
import android.content.Context;
import android.content.SharedPreferences;
import android.util.Log;

public class ColorCollections{
     Context context;
     public ColorCollections(Context context){
            this.context = context;
        }
    //Color Palettes.
    public static String[] Win8 = new String[]{"#008299","#00A0B1","#2672EC","#2E8DEF","#8C0095","#A700AE","#5133AB","#643EBF","#AC193D","#BF1E4B","#D24726","#DC572E","#008A00","#00A600","#094AB2","#0A5BC4"};
    public static String[] ModernUrban = new String[]{"#47B6BE","#73CC3E","#FF7149","#FF5063","#FF6999","#233977","#4B9364","#8A8F1D","#A63B52","#B23265","#883E57","#888788","#87A087"};

    public List<String> GetColorList(int colorindex, boolean randomizer){
        List<String> colorList = Arrays.asList(Win8);
        switch(colorindex){
        case 0:
            colorList = Arrays.asList(Win8);
            break;
        case 1:
            colorList = Arrays.asList(ModernUrban);
            break;
        }

        if(randomizer == true){
            Collections.shuffle(colorList);
            Collections.shuffle(colorList);
            Collections.shuffle(colorList);
            Collections.shuffle(colorList);
        }
        return colorList;
    }
    public int GetTheme(int theme){
        int themeID = 0;
        switch(theme){
        case 0:
            themeID = R.layout.activity_main_menu_light;
            break;
        case 1:
            themeID = R.layout.activity_main_menu_light_bg;
            break;
        case 2:
            themeID = R.layout.activity_main_menu_dark;
            break;
        case 3:
            themeID = R.layout.activity_main_menu_dark_bg;
            break;
        }       
        return themeID;
    }

}

有人可以找出问题吗?在过去的 2 个小时里,我一直坚持这个问题,并且尝试了所有方法,甚至最终获得了效率更高的代码(我知道这对你来说可能看起来很糟糕,但更糟糕的是,相信我)。

另外我有4组图标,每组12个图标,每组都有图标前缀,它是一个实际导入的可绘制.png。有没有比手动输入更好的方法来创建它们的 XML 列表?

谢谢你。

4

1 回答 1

0

我无法找到问题的确切位置,但如果您还没有找到问题的具体位置,那么进行调试会有所帮助,然后开始使用 setSingleChoiceItems(...) 函数。您可以使用 ListView 来显示 XML 列表。这是从 strings.xml 文件生成的示例:http ://www.androidhive.info/2011/10/android-listview-tutorial/ 。更复杂的 ListView 将需要您创建自定义适配器类。

于 2013-08-22T02:37:16.587 回答