質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JAR

JAR(又はJava ARchive)はコンパイルされた複数のJavaバイトコード及び関連ファイルのリソースを一つのファイルに統合したものです。JARファイルはZIPファイルのフォーマットで構築されています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Wear

Android Wearとは、Googleが発表した腕時計型ウェアラブルデバイス(スマートウォッチ)向けのプラットフォームです。GoogleのAndroid OSをベースにしており、情報の入手・管理などを行うことができます。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

7622閲覧

AndroidのTabHostについて

TakamasaAwai

総合スコア73

JAR

JAR(又はJava ARchive)はコンパイルされた複数のJavaバイトコード及び関連ファイルのリソースを一つのファイルに統合したものです。JARファイルはZIPファイルのフォーマットで構築されています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Wear

Android Wearとは、Googleが発表した腕時計型ウェアラブルデバイス(スマートウォッチ)向けのプラットフォームです。GoogleのAndroid OSをベースにしており、情報の入手・管理などを行うことができます。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2015/07/10 10:45

AndroidのTabHostについて質問です。

lang

1@Override 2protected void onCreate(Bundle savedInstanceState) { 3 super.onCreate(savedInstanceState); 4 setContentView(R.layout.activity_main); 5 6 // Create the adapter that will return a fragment for each of the three 7 // primary sections of the activity. 8 mSectionsPagerAdapter = new SectionsPagerAdapter(getFragmentManager()); 9 10 // Set up the ViewPager with the sections adapter. 11 mViewPager = (ViewPager) findViewById(R.id.pager); 12 mViewPager.setAdapter(mSectionsPagerAdapter); 13 14 TabHost tabHost = (TabHost) findViewById(android.R.id.tabhost); 15 tabHost.setup(); 16 17 for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) { 18 tabHost.addTab(tabHost 19 .newTabSpec(String.valueOf(i)) 20 .setIndicator(mSectionsPagerAdapter.getPageTitle(i)) 21 .setContent(android.R.id.tabcontent)); 22 } 23 24 tabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() { 25 @Override 26 public void onTabChanged(String tabId) { 27 mViewPager.setCurrentItem(Integer.valueOf(tabId)); 28 } 29 }); 30 31 mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener(){ 32 @Override 33 public void onPageSelected(int position) { 34 super.onPageSelected(position); 35 tabHost.setCurrentTab(position); 36 } 37 }); 38}

このコードで、最後の tabHost.setCurrentTab(position); の部分にエラーが出ます。エラー内容はVariable ’tabHost’ is accessed from within inner class, needs to be declar final です。どこをfinalにすれば良いですか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんにちは。LiT!のごっちゃんです!笑

swordoneさんの言うとおり、finalにするのもいいですが、
原因を言うと、内部クラスからは呼び出すことができないのが原因です。
呼び出すためには、final(定数)にするか、メンバ変数(クラスの外に書く)方法があります。

finalにすると、後から編集ができなく、都合が悪い場合もあると思いますので、メンバ変数の方法をおすすめします。

lang

1TabHost tabHost; 2 3@Override 4protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.activity_main); 7 8 // Create the adapter that will return a fragment for each of the three 9 // primary sections of the activity. 10 mSectionsPagerAdapter = new SectionsPagerAdapter(getFragmentManager()); 11 12 // Set up the ViewPager with the sections adapter. 13 mViewPager = (ViewPager) findViewById(R.id.pager); 14 mViewPager.setAdapter(mSectionsPagerAdapter); 15 16 tabHost = (TabHost) findViewById(android.R.id.tabhost); 17 tabHost.setup(); 18 19 for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) { 20 tabHost.addTab(tabHost 21 .newTabSpec(String.valueOf(i)) 22 .setIndicator(mSectionsPagerAdapter.getPageTitle(i)) 23 .setContent(android.R.id.tabcontent)); 24 } 25 26 tabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() { 27 @Override 28 public void onTabChanged(String tabId) { 29 mViewPager.setCurrentItem(Integer.valueOf(tabId)); 30 } 31 }); 32 33 mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener(){ 34 @Override 35 public void onPageSelected(int position) { 36 super.onPageSelected(position); 37 tabHost.setCurrentTab(position); 38 } 39 }); 40}

僕は、このようにすることをおすすめします。

投稿2015/07/10 11:20

RitsukiGoto

総合スコア99

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TakamasaAwai

2015/07/10 14:40

ここにもいらっしゃったのですね。(笑) 最近javaの勉強を本格的にしたのですが、オブジェクトを使うとこんなにいいことがあるのですね。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問