2011-07-16 2 views
1

私のlitttleアプリケーションでは、このアクティビティのタブにビューを配置しようとしています。私が最初にやろうとしているのは、他のクラス(他のファイルにある)で見つかったコードの一部を使って、ビューを設定することです。以下は、タブを作成してコードを設定するクラスです。別のファイルの別のクラスのレイアウトを使用できません

CreateCharacterTabsActivity.java

package com.androidGuy.DnDApp; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.widget.LinearLayout; 
import android.widget.TabHost; 
import android.widget.TabHost.OnTabChangeListener; 
import android.widget.TableLayout; 
import android.content.Context; 
import android.content.Intent; 
import android.widget.TabHost.TabContentFactory; 

public class CreateCharacterTabsActivity extends Activity implements OnTabChangeListener { 
private TabHost tabHost; 
private TableLayout scoreTable; 
private LinearLayout raceLayout; 

private CharacterAbilityScoresActivity abilityScoresActivity; 

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

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

    // Set up them tabs. 
    tabHost = (TabHost) findViewById(android.R.id.tabhost); 
    // Set up the tabhost. 
    tabHost.setup(); 
    tabHost.setOnTabChangedListener(this); 
    scoreTable = (TableLayout) abilityScoresActivity.getAbilityScoreTable(); 
    raceLayout = (LinearLayout) findViewById(R.id.raceLayout); 



    // 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; 
     } 
    })); 

    // 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 

} 

} 

これは、このクラスから他のコードを取得します。

起こると想定されて何CharacterAbilityScoresActivity.java

package com.androidGuy.DnDApp; 

import android.app.Activity; 
import android.content.Context; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemSelectedListener; 
import android.widget.ArrayAdapter; 
import android.widget.Spinner; 
import android.widget.TableLayout; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 

/* This is for character class scores, settings, and... Stuff. */ 
import com.androidGuy.DnDApp.CharacterData; 

public class CharacterAbilityScoresActivity extends Activity { 

CharacterData characterData = new CharacterData(); 

private Spinner strengthSpinner; 
private Spinner dexteritySpinner; 
private Spinner constitutionSpinner; 
private Spinner intelligenceSpinner; 
private Spinner wisdomSpinner; 
private Spinner charismaSpinner; 
private ArrayAdapter<?> adapter; 
private TableLayout abilityScoreTable; 

public TableLayout getAbilityScoreTable() { 
    return abilityScoreTable; 
} 

/* Le constructor. Set up all of the fields (the adapters and the spinner boxes) and return 
* a tabletLayout objects (or at least, I hope that's how it'll work). */ 
CharacterAbilityScoresActivity() { 

    final LayoutInflater Die_Fledermaus = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    abilityScoreTable = (TableLayout) Die_Fledermaus.inflate(R.layout.ability_score_spinners, null); 

    adapter = ArrayAdapter.createFromResource(Die_Fledermaus.getContext(), R.array.string_ability_scores, android.R.layout.simple_spinner_item); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

    /* The ability score spinners */ 
    strengthSpinner = (Spinner) findViewById(R.id.StrengthSpinner); 

    strengthSpinner.setAdapter(adapter); 
    strengthSpinner.setOnItemSelectedListener(new OnItemSelectedListener() { 

      public void onItemSelected(AdapterView<?> arg0, View arg1, 
        int arg2, long arg3) { 
        characterData.setStrengthScore(getResources().getIntArray(R.array.ability_scores)[(int) strengthSpinner.getItemIdAtPosition(arg2)]); 
      } 

      public void onNothingSelected(AdapterView<?> arg0) { 

      } 

     }); 

    dexteritySpinner = (Spinner) findViewById(R.id.dexteritySpinner); 

    dexteritySpinner.setAdapter(adapter); 
    dexteritySpinner.setOnItemSelectedListener(new OnItemSelectedListener() { 

       public void onItemSelected(AdapterView<?> arg0, View arg1, 
         int arg2, long arg3) { 
         characterData.setDexterityScore(getResources().getIntArray(R.array.ability_scores)[(int) dexteritySpinner.getItemIdAtPosition(arg2)]); 

       } 

       public void onNothingSelected(AdapterView<?> arg0) { 

       } 

      }); 

    constitutionSpinner = (Spinner) findViewById(R.id.ConstitutionSpinner); 
    constitutionSpinner.setAdapter(adapter); 
    constitutionSpinner 
      .setOnItemSelectedListener(new OnItemSelectedListener() { 

       public void onItemSelected(AdapterView<?> parent, View view, 
         int pos, long id) { 
        characterData.setConstitutionScore(getResources().getIntArray(R.array.ability_scores)[(int) constitutionSpinner.getItemIdAtPosition(pos)]); 
       } 

       public void onNothingSelected(AdapterView<?> arg0) { 

       } 
      }); 

    intelligenceSpinner = (Spinner) findViewById(R.id.intelligenceSpinner); 
    intelligenceSpinner.setAdapter(adapter); 
    intelligenceSpinner 
      .setOnItemSelectedListener(new OnItemSelectedListener() { 

       public void onItemSelected(AdapterView<?> parent, View view, 
         int pos, long id) { 
        characterData.setIntelligenceScore(getResources().getIntArray(R.array.ability_scores)[(int) intelligenceSpinner.getItemIdAtPosition(pos)]); 
       } 

       public void onNothingSelected(AdapterView<?> arg0) { 

       } 
      }); 

    wisdomSpinner = (Spinner) findViewById(R.id.WisdomSpinner); 
    wisdomSpinner.setAdapter(adapter); 
    wisdomSpinner 
      .setOnItemSelectedListener(new OnItemSelectedListener() { 

       public void onItemSelected(AdapterView<?> arg0, View arg1, 
         int arg2, long arg3) { 
        characterData.setWisdomScore(getResources().getIntArray(R.array.ability_scores)[(int) wisdomSpinner.getItemIdAtPosition(arg2)]); 
       } 

       public void onNothingSelected(AdapterView<?> arg0) { 

       } 

      }); 

    charismaSpinner = (Spinner) findViewById(R.id.CharismaSpinner); 
    charismaSpinner.setAdapter(adapter); 
    charismaSpinner 
      .setOnItemSelectedListener(new OnItemSelectedListener() { 

       public void onItemSelected(AdapterView<?> arg0, View arg1, 
         int arg2, long arg3) { 
        characterData.setCharismaScore(getResources().getIntArray(R.array.ability_scores)[(int) charismaSpinner.getItemIdAtPosition(arg2)]); 
       } 

       public void onNothingSelected(AdapterView<?> arg0) { 

       } 

      }); 
    } 
} 

CharacterAbilityScoresActivityでコンストラクタはスピンボックスのすべてを作成し、それらにアダプタが割り当てられています。私はcreateTabContent()メソッドでそれらを保持するtableLayoutをCreateCharacterTabsActivityに戻そうとします。しかし、何が起こるかは、tabHost.setup()(スタックトレースからエラーが発生していると言われている)の周辺でエラーが発生するということです。

[編集]もっと助けてください、ここでスタックトレースです。

07-16 13:40:47.100: ERROR/AndroidRuntime(386): FATAL EXCEPTION: main 
07-16 13:40:47.100: ERROR/AndroidRuntime(386): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.androidGuy.DnDApp/com.androidGuy.DnDApp.CreateCharacterTabsActivity}: java.lang.NullPointerException 
07-16 13:40:47.100: ERROR/AndroidRuntime(386):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 
07-16 13:40:47.100: ERROR/AndroidRuntime(386):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
07-16 13:40:47.100: ERROR/AndroidRuntime(386):  at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
07-16 13:40:47.100: ERROR/AndroidRuntime(386):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
07-16 13:40:47.100: ERROR/AndroidRuntime(386):  at android.os.Handler.dispatchMessage(Handler.java:99) 
07-16 13:40:47.100: ERROR/AndroidRuntime(386):  at android.os.Looper.loop(Looper.java:123) 
07-16 13:40:47.100: ERROR/AndroidRuntime(386):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
07-16 13:40:47.100: ERROR/AndroidRuntime(386):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-16 13:40:47.100: ERROR/AndroidRuntime(386):  at java.lang.reflect.Method.invoke(Method.java:507) 
07-16 13:40:47.100: ERROR/AndroidRuntime(386):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
07-16 13:40:47.100: ERROR/AndroidRuntime(386):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
07-16 13:40:47.100: ERROR/AndroidRuntime(386):  at dalvik.system.NativeStart.main(Native Method) 
07-16 13:40:47.100: ERROR/AndroidRuntime(386): Caused by: java.lang.NullPointerException 
07-16 13:40:47.100: ERROR/AndroidRuntime(386):  at com.androidGuy.DnDApp.CreateCharacterTabsActivity.onCreate(CreateCharacterTabsActivity.java:34) 
07-16 13:40:47.100: ERROR/AndroidRuntime(386):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
07-16 13:40:47.100: ERROR/AndroidRuntime(386):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
07-16 13:40:47.100: ERROR/AndroidRuntime(386):  ... 11 more 
+0

最初のコードブロックの紛失したバックティックは間違っていると思います。私はそれを取り除きましたので、フォーマットはより良いものになりました;)。さらに、コードのいくつか(エラーと関係ないもの)を削除して、最小限の例を得て、実際にエラー(スタックトレース)を貼り付けるべきです。 – Nanne

答えて

1

無スタックトレースとコードのの\ inftyの量はありませんが、これはshakeyになります:

setContentView(R.layout.simple_layout); 

// Set up them tabs. 
tabHost = (TabHost) findViewById(android.R.id.tabhost); 

You'vはfindViewByIdは任意のXMLでのランダム表示を見つけられないことを認識するようになったが、あなたの画面上でビューを見つける。

ID tabhostとビューはtabs.xmlであり、そして限り、私はあなただけの画面上simple_layoutを持って見ることができるように、この時点で変数tabHostnullなように。

ので、この次の行:

tabHost.setup(); 

はあなたにnullpointerexceptionを与えるだろう。

+0

答えてくれてありがとう、Nanne。だから私はそれに多くのビューを持つレイアウトを設定する必要がありますか?またはtabs.xmlファイルを変更するだけですか? – Ertain

+0

できますが、する必要はありません。あなたができないのは、画面に表示されていないビュー(ID)に対して 'findviewbyid'を使用することだけです。表示されているxmlに必要なものを追加することはできますが、インフルエーターを使用してxmlを使用して 'addview'を使用することもできます。 – Nanne

+0

ああ、大丈夫です。だから私はレイアウトを膨らませて、 "addview"を使用しようとします。 – Ertain

関連する問題