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

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

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

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

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

Android Studio

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

Q&A

解決済

1回答

2514閲覧

AndroidStduioでのタブ作成について

rvsezuki

総合スコア66

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

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

Android Studio

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

0グッド

0クリップ

投稿2017/01/23 03:05

AndroidStduioでのタブ作成について

xmlで(色の部分は適当です。)
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="赤色"
app:tabIndicatorColor="青色
/>

のように設定しました。
そしてJavaの方で
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);

tabLayout.addTab(tabLayout.newTab().setText("テスト1")); tabLayout.addTab(tabLayout.newTab().setText("テスト2")); tabLayout.addTab(tabLayout.newTab().setText("テスト3")); tabLayout.addTab(tabLayout.newTab().setText("テスト4"));

のように設定したところ見た目はOKになりました。
今度はタブをクリックした時にページの切り替えを行いたいです。
タブ毎へのtagの設定方法とクリック時のイベント方法などをよろしくお願いいたします。
各タブで表示させるlistはlistviewで設定できました。
→今の所4つのボタンを設置してボタンをクリックした時に
public void onStart(){
this.findViewById(R.id.test1).setOnClickListener(
new OnClickListener() {
public void onClick(final View v) {
testppl.this.onClickProc(v);
}
});

this.findViewById(R.id.test2).setOnClickListener(
new OnClickListener() {
public void onClick(final View v) {
testppl.this.onClickProc(v);
}
});
・・・・・・・・
}
と設定することで切り替えは可能です。

なお諸事情がありviewpagerでの切り替えは行いません。(正確にはviewpagerでの切り替えができない)
ですのでtabをクリックした時に設定してあるtagを取得してイベント発生を感知ページ切り替えのようにしたいです。(現在のJavaをあまり変えずにonStart内で切り替えたい)
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

tagの設定は下記の通り、タブを作る時に設定できます。

Java

1tabLayout.newTab().setText("テスト").setTab("hoge");

クリックについてはTablayout#addOnTabSelectedLisnerを使用しましょう。

また、コードはコード用の記述方法に修正してください。

投稿2017/01/23 03:28

編集2017/01/23 03:29
yona

総合スコア18155

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

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

rvsezuki

2017/01/23 04:20

tag設定ありがとうございました。 タブのクリックなんですが、具体的にクリックした時にどのようにOnTabSelectedLisnerでtagを検出 すればよろしいでしょうか? よろしくお願いいたします。
yona

2017/01/23 05:15

実際にやってみるとわかりますが、インターフェースの各メソッドの引数がクリックされたTabになります。 Tab#getTagをすると値が取れます。
rvsezuki

2017/01/23 06:10

何度も申し訳ありません。Javaを始めてまだ2か月程度なのでよくわかならいです。 現在Buttonでの処理は以下のようにしてあります。 public void onStart(){ ・・・・・ ・・・・・ this.findViewById(R.id.test1).setOnClickListener( new OnClickListener() { public void onClick(final View v) { testappl.this.onClickProc(v);⇦ここで画面切り替え } }); button4つ分↑のような処理を書いている。 } onStartより前に TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); tabLayout.addTab(tabLayout.newTab().setText("テスト1").setTag(1)); tabLayout.addTab(tabLayout.newTab().setText("テスト2").setTag(2)); tabLayout.addTab(tabLayout.newTab().setText("テスト3").setTag(3)); でtagと名前は定義できました。 onStart()内のButton部分の書き換えで TabLayout.OnTabSelectedListener. までかけました。 この後どのように書けば良いのでしょうか? よろしくお願いいたします。
yona

2017/01/23 06:15

現状ボタンで切り替えているものをタブで切り替えたいという質問ですよね? なぜボタンのクリックリスナーに追加しているのでましょうか。
rvsezuki

2017/01/23 06:22

申し訳ありません。 言葉足らずでした。 現在ボタンでは this.findViewById(R.id.test1).setOnClickListener( new OnClickListener() { public void onClick(final View v) { testappl.this.onClickProc(v); } }); と書いており、tabに切り替えたいので これをTabLayout.OnTabSelectedListenerで書き換え(修正)を行なっている途中です。 setOnClickListenerの部分をTabSelectedListenerなどに書き換えれば通用するのではと考えていました。
rvsezuki

2017/01/23 07:14 編集

yona様のおかげで、少しずつ分かってきました。 ありがとうございます。 TabLayout.OnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { } @Override public void onTabUnselected(TabLayout.Tab tab) { } @Override public void onTabReselected(TabLayout.Tab tab) { } }); ここまできました。 この後どうすればよいでしょうか? 本当に申し訳ありません。 よろしくお願いいたします。
rvsezuki

2017/01/23 07:37

選択tagでの切り替えなので 以下のようなのがベストと考えました。 TabLayout.OnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { switch (tab.getTag()){ case 1: 1番目がタップされた時 break; case 2: 2番目がタップされた時 break; case 3: 3番目がタップされた時 break; } } }); こんな感じで大丈夫でしょうか?
yona

2017/01/23 07:40

あとはあなたがやりたいことをすればいいですよ。具体的な内容は私にはわかりません。 TabからTagを取り出してListViewの表示を変更するんですよね?既に回答しているので考えましょう。
yona

2017/01/23 07:41 編集

コメントが被りましたね、コメントのコードであっていると思います。 やってみて思った通り出なかったら質問してください。
rvsezuki

2017/01/23 09:16

@Override public void onCreate(final Bundle savedInstanceState) { TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); tabLayout.addTab(tabLayout.newTab().setText("テスト1").setTag(1)); tabLayout.addTab(tabLayout.newTab().setText("テスト2").setTag(2)); tabLayout.addTab(tabLayout.newTab().setText("テスト3").setTag(3)); } public void onStart() { TabLayout.OnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tag) { //オブジェクトからint型へ変換できない等のエラーが出たため、以下の2行を追加 float fValue = Float.valueOf(TabLayout.Tab.getTag()); int value = (int)fValue; switch (value) { case 1: 1番目表示 break; case 2: 2番目表示 break; case 3: 3番目表示 break; } } @Override public void onTabUnselected(TabLayout.Tab tag) { } @Override public void onTabReselected(TabLayout.Tab tag) { } }); } としたのですが、 エラー: staticでないメソッド getTag()をstaticコンテキストから参照することはできません とでました。 static int getTag();などを考えられる場所に書いてみましたが、赤波線が出てエラーになりました。 どこの変数にstatic宣言すれば良いのでしょうか? またfloatとintの部分を消して直接 switch (TabLayout.Tab.getTag()) とした場合には エラー: 不適合な型: Objectをintに変換できません と出ますが、最初にsetTag(1)と設定したのでint型ではないのでしょうか? 申し訳ありませんが、解説よろしくお願いいたします。
yona

2017/01/23 09:33

聞く前にエラーについて調べましょうね。私は解説員でも先生でもないですよ。 getTagはインスタンスメソッドです、getTagの戻り値はObject型です。
rvsezuki

2017/01/23 09:48

8割がた解決しました。 お手数おかけしました。 解説と質問への回答ありがとうございました。m(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問