0

だから私は2番目のアプリを作っています.複数のスキン/アイコンセットを持ち、メインメニューボタンをランダム化できるメニューを構築することに決めました.ユーザーが別のスキームを選択すると、色が動的に変化するようになりました。これは正常に機能し、ユーザーが毎回メニューボタンの色をランダムにするかどうかを尋ねるボックスに来ると、次のようになります。

ランダム化をクリックすると動的に変化しますが、シーケンシャルにチェックを入れるとまったく変化せず、わかりません。

私は 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 に答える