Включение или отключение флажков из-за некоторых пользовательских данных - PullRequest
0 голосов
/ 26 июля 2011

Я пытаюсь отключить некоторые флажки в TabHost У меня есть. Когда приложение загружается, оно должно проверить, являются ли некоторые пользовательские данные (найденные в characterData.getCharacterClass() и characterData.getCharacterRace()) нулевыми, и если это так, отключает флажки на вкладке «Умения». К сожалению, он не отключает флажки (также он должен включать их, когда characterData.getCharacterClass() и characterData.getCharacterRace() имеют значение true или иным образом содержат данные). Я попытался установить OnFocusChangedListener() для проверки этих данных, когда фокус переключается на вкладку «Умения», но, как вы, вероятно, видите, это не работает.

[Правка # 3] У Араша А. хорошее лидерство. Я искал неправильный LinearLayout для перемещения по различным флажкам.

[Edit # 2] Я пытался использовать оператор OR, как это предлагалось, но это тоже не работает. Я думаю, что моя проблема в том, как я прохожу представления в моей функции changeSkillCheckboxes(). Я думаю, это потому, что у меня есть только два дочерних представления вместо всех необходимых флажков. Теперь все, что мне нужно сделать, это выяснить, как на самом деле получить все флажки.

[Edit # 1] Я попробовал первое предложение, данное мне. Но это тоже не сработало. Может быть, это в методе, который должен отключить флажки. Вот код для этого:

public void changeSkillCheckboxes(boolean toggle) {
     if (toggle) {
         for (int i = 0; i < skillsCheckboxLayout.getChildCount(); i++) {
                if (skillsCheckboxLayout.getChildAt(i) instanceof CheckBox) {
                  CheckBox cb = (CheckBox) skillsCheckboxLayout.getChildAt(i);
                  cb.setEnabled(false);
                  Log.i(DEBUG_LOG, "Box disabled.");
                    } else {
                      Log.i(DEBUG_LOG, "CheckBox wasn't found, with count " + i);
                    }
                 }   
         } else {
                for (int i = 0; i < skillsCheckboxLayout.getChildCount(); i++) {
                      if (skillsCheckboxLayout.getChildAt(i) instanceof CheckBox) { 
                        CheckBox cb = (CheckBox) skillsCheckboxLayout.getChildAt(i);
                        cb.setEnabled(true);
                      }
                    }
                 }
     }

Код проверяет, являются ли изменяемые элементы флажками, иначе он выдаст ошибку (у меня там также есть схема прокрутки).

В любом случае, вот код для двух классов:

Файл вкладок

package com.androidGuy.DnDApp;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener;
import android.widget.LinearLayout;
import android.widget.TabHost;
import android.widget.TabHost.OnTabChangeListener;
import android.widget.TableLayout;
import android.widget.TabHost.TabContentFactory;

public class CreateCharacterTabsActivity extends Activity implements OnTabChangeListener  {
private static final String DEBUG_LOG = "DnDAppDebugInfo";

private TabHost tabHost;
private TableLayout scoreTable;
private LinearLayout raceLayout;
private LinearLayout characterClassesLayout;
private LinearLayout skillLayout;


private CharacterAbilityScoresActivity abilityScoresActivity;
private CharacterRaceActivity raceActivity;
private SkillChooserActivity skillActivity;

// Tab tags: got to love them.
private static final String ABILITY_SCORES_TAB = "scores";
private static final String RACE_TAB = "race";
private static final String CLASS_TAB = "classes";
private static final String SKILL_TAB = "skills";

CharacterData characterData = new CharacterData();

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tabs);

    // Set up them tabs.
    tabHost = (TabHost) findViewById(R.id.tabhost01);
    // Set up the tabhost.
    tabHost.setup();
    tabHost.setOnTabChangedListener(this);
    // Ability scores
    abilityScoresActivity = new CharacterAbilityScoresActivity(this) ;
    scoreTable = (TableLayout) abilityScoresActivity.getAbilityScoreTable();
    // Character race
    raceActivity = new CharacterRaceActivity(this);
    raceLayout = (LinearLayout) raceActivity.getRacesLayout();
    // Character class
    characterClassesLayout = (LinearLayout) (new CharacterClassActivity(this)).getCharacterClassLayout();
    // Class skills
    skillActivity = new SkillChooserActivity(this);
    skillLayout = (LinearLayout) skillActivity.getSkillsCheckboxLayout();

    /* Check to see if the user has selected a race and class.  Once they have enable the skills checkboxes. */
    // tabHost.getTabWidget().getChildAt(3)
    skillLayout.setOnFocusChangeListener(new OnFocusChangeListener() {
        public void onFocusChange(View v, boolean hasFocus) {

            if (characterData.getCharacterClass() == null && characterData.getRace() == null) {
                skillActivity.changeSkillCheckboxes(true); // Disable the skill checkboxes
                Log.i(DEBUG_LOG, "Skill checkboxes disabled.");
            } else {
                skillActivity.changeSkillCheckboxes(false); // Enable the skill checkboxes
                Log.i(DEBUG_LOG, "Skill checkboxes enabled.");
            }
        }
    }

    );

    // Add views to the tab host.
    tabHost.addTab(tabHost.newTabSpec(ABILITY_SCORES_TAB).setIndicator("Scores").setContent(new TabContentFactory() {
        public View createTabContent(String arg0) {
            return scoreTable;
        }
    }));

    tabHost.addTab(tabHost.newTabSpec(RACE_TAB).setIndicator("Races").setContent(new TabContentFactory() {
        public View createTabContent(String arg1) {
            return raceLayout;
        }
    }));

    tabHost.addTab(tabHost.newTabSpec(CLASS_TAB).setIndicator("Classes").setContent(new TabContentFactory() {
        public View createTabContent(String arg2) {
            return characterClassesLayout;
        }
    }));

    tabHost.addTab(tabHost.newTabSpec(SKILL_TAB).setIndicator("Skills").setContent(new TabContentFactory() {
        public View createTabContent(String arg3) {
            return skillLayout;
        }
    }

    ));

    // I have heard this is a hack brought upon by a bug.
    tabHost.setCurrentTab(1);
    tabHost.setCurrentTab(0);
}


public void onTabChanged(String arg0) {
    // TODO Auto-generated method stub

}

}

Файл навыков

package com.androidGuy.DnDApp;

import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View.OnClickListener;
import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import android.view.View;

public class SkillChooserActivity extends Activity implements OnClickListener {

// Character information
CharacterData characterData = new CharacterData();

LinearLayout skillsCheckboxLayout;
Context leContext;
private static final String DEBUG_LOG = "DnDAppDebugInfo";

// Skill checkbox member variables
private CheckBox acrobaticsCheckBox;
private CheckBox arcanaCheckBox;
private CheckBox athleticsCheckBox;
private CheckBox bluffCheckBox;
private CheckBox diplomacyCheckBox;
private CheckBox dungeoneeringCheckBox;
private CheckBox enduranceCheckBox;
private CheckBox healCheckBox;
private CheckBox historyCheckBox;
private CheckBox insightCheckBox;
private CheckBox intimidateCheckBox;
private CheckBox natureCheckBox;
private CheckBox perceptionCheckBox;
private CheckBox religionCheckBox;
private CheckBox stealthCheckBox;
private CheckBox streetwiseCheckBox;
private CheckBox thieveryCheckBox;

SkillChooserActivity(Context mContext) {
    leContext = mContext;
    LayoutInflater inflater = (LayoutInflater) leContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    skillsCheckboxLayout = (LinearLayout) inflater.inflate(R.layout.other_skill_selector, null);

    /* And now, lots and lots of checkboxes. */
    acrobaticsCheckBox = (CheckBox) skillsCheckboxLayout.findViewById(R.id.AcrobaticsCheckBox);
    acrobaticsCheckBox.setOnClickListener(this);
    arcanaCheckBox = (CheckBox) skillsCheckboxLayout.findViewById(R.id.ArcanaCheckBox);
    arcanaCheckBox.setOnClickListener(this);
    athleticsCheckBox = (CheckBox) skillsCheckboxLayout.findViewById(R.id.AthleticsCheckBox);
    athleticsCheckBox.setOnClickListener(this);
    bluffCheckBox = (CheckBox) skillsCheckboxLayout.findViewById(R.id.BluffCheckBox);
    bluffCheckBox.setOnClickListener(this);
    diplomacyCheckBox = (CheckBox) skillsCheckboxLayout.findViewById(R.id.DiplomacyCheckBox);
    diplomacyCheckBox.setOnClickListener(this);
    dungeoneeringCheckBox = (CheckBox) skillsCheckboxLayout.findViewById(R.id.DungeoneeringCheckBox);
    dungeoneeringCheckBox.setOnClickListener(this);
    enduranceCheckBox = (CheckBox) skillsCheckboxLayout.findViewById(R.id.EnduranceCheckBox);
    enduranceCheckBox.setOnClickListener(this);
    healCheckBox = (CheckBox) skillsCheckboxLayout.findViewById(R.id.HealCheckBox);
    healCheckBox.setOnClickListener(this);
    historyCheckBox = (CheckBox) skillsCheckboxLayout.findViewById(R.id.HistoryCheckBox);
    historyCheckBox.setOnClickListener(this);
    insightCheckBox = (CheckBox) skillsCheckboxLayout.findViewById(R.id.InsightCheckBox);
    insightCheckBox.setOnClickListener(this);
    intimidateCheckBox = (CheckBox) skillsCheckboxLayout.findViewById(R.id.IntimidateCheckBox);
    intimidateCheckBox.setOnClickListener(this);
    natureCheckBox = (CheckBox) skillsCheckboxLayout.findViewById(R.id.NatureCheckBox);
    natureCheckBox.setOnClickListener(this);
    perceptionCheckBox = (CheckBox) skillsCheckboxLayout.findViewById(R.id.PerceptionCheckBox);
    perceptionCheckBox.setOnClickListener(this);
    religionCheckBox = (CheckBox) skillsCheckboxLayout.findViewById(R.id.ReligionCheckBox);
    religionCheckBox.setOnClickListener(this);
    stealthCheckBox = (CheckBox) skillsCheckboxLayout.findViewById(R.id.StealthCheckBox);
    stealthCheckBox.setOnClickListener(this);
    streetwiseCheckBox = (CheckBox) skillsCheckboxLayout.findViewById(R.id.StreetwiseCheckBox);
    streetwiseCheckBox.setOnClickListener(this);
    thieveryCheckBox = (CheckBox) skillsCheckboxLayout.findViewById(R.id.ThieveryCheckBox);
    thieveryCheckBox.setOnClickListener(this);

     }
 public void changeSkillCheckboxes(boolean toggle) {
     if (toggle) {
         for (int i = 0; i < skillsCheckboxLayout.getChildCount(); i++) {
                if (skillsCheckboxLayout.getChildAt(i) instanceof CheckBox) {
                  CheckBox cb = (CheckBox) skillsCheckboxLayout.getChildAt(i);
                  cb.setEnabled(false);
                  Log.i(DEBUG_LOG, "Box disabled.");
                    } else {
                      Log.i(DEBUG_LOG, "CheckBox wasn't found, with count " + i);
                    }
                 }   
         } else {
                for (int i = 0; i < skillsCheckboxLayout.getChildCount(); i++) {
                      if (skillsCheckboxLayout.getChildAt(i) instanceof CheckBox) { 
                        CheckBox cb = (CheckBox) skillsCheckboxLayout.getChildAt(i);
                        cb.setEnabled(true);
                      }
                    }
                 }
     }

public LinearLayout getSkillsCheckboxLayout() {
    return skillsCheckboxLayout;
}

/* Check their state. */
public void onClick(View v) {
    if(((CheckBox)v).isChecked()) {
        Toast.makeText(leContext, "You selected " + ((TextView)v).getText().toString(), Toast.LENGTH_SHORT).show();
        Log.i(DEBUG_LOG, "com.anddroidguy.SkillChooserActivity: the value of \'Class\' is " + characterData.getCharacterClass());
    } else {
        Toast.makeText(leContext, "Okay, I guess you can select something else...", Toast.LENGTH_SHORT).show();
        Log.i(DEBUG_LOG, "com.anddroidguy.SkillChooserActivity: the value of \'Class\' is " + characterData.getCharacterClass());
    }
}
}

Ответы [ 2 ]

1 голос
/ 26 июля 2011

Я думаю, что проблема может быть в этом утверждении:

CheckBox cb = (CheckBox) skillsCheckboxLayout.getChildAt(i);

Попробуйте изменить его на это, когда вы получаете флажок:

CheckBox cb = (CheckBox)findViewById(R.id.checkbox1);
0 голосов
/ 26 июля 2011

Используйте это в вашем onTabChanged методе.

public void onTabChanged(String tag) {
    if (SKILL_TAB.equals(tag)) {
        // Do your check
        // Maybe should be OR?
        if (characterData.getCharacterClass() == null && characterData.getRace() == null) {
            skillActivity.changeSkillCheckboxes(true); // Disable the skill checkboxes
            Log.i(DEBUG_LOG, "Skill checkboxes disabled.");
        } else {
            skillActivity.changeSkillCheckboxes(false); // Enable the skill checkboxes
            Log.i(DEBUG_LOG, "Skill checkboxes enabled.");
        }

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...