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

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

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

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

Q&A

解決済

1回答

634閲覧

Android studio setNegativeButtonをリストの一つ目にのみ表示したい

tt3415

総合スコア1

Android Studio

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

0グッド

0クリップ

投稿2021/10/04 09:04

前提・実現したいこと

リストビューの配列の一つ目にのみdialogのsetNegativeButtonを表示したい

発生している問題・エラーメッセージ

どのように定義したらよいのかが分かりません。 下のコードのままだと、すべてのリストをクリックしたときにsetNegativeButtonの表示が出てしまいます。

該当のソースコード

package com.example.mylistapp;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;

import android.graphics.Color;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.app.ListActivity;
import android.widget.ImageView;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

//データ String[] str = { "位置情報", "カメラ", "カレンダー", };

配列がこれです
String[] msg = {

//位置情報 "Android端末の位置情報を取得する権限です。\n" + "位置情報サービスを使用するアプリは、ユーザーのプライバシーを保護するために、位置情報へのアクセスをリクエストする必要があります。\n" + "多くのアプリで求められる権限ですが、位置情報を収集して別の目的に利用するといった不正アプリなどもあるので注意しましょう。",

↑この一行目にのみ表示したい

//カメラ ~ //カレンダー ~ };

|
|
|
|
//リスト表示
((ListView)findViewById(R.id.lv)).setAdapter(adapter);

//クリック処理 ((ListView)findViewById(R.id.lv)).setOnItemClickListener( new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

new AlertDialog.Builder(MainActivity.this)
.setCustomTitle(str[position]+"の権限説明")
.setMessage(msg[position])
.setPositiveButton("閉じる", null)
.setNegativeButton("位置情報取得へ", null) ←ここのsetNegativeButtonを一行目にのみ表示したい
.setIcon(R.mipmap.ic_launcher)
.show();
}
});
}
}

試したこと

色々なサイトを参考にしましたが、分かりませんでした。
初心者質問で申し訳ありませんが、どなたかよろしくお願いします。

補足情報(FW/ツールのバージョンなど)

Android studio

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

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

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

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

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

jimbe

2021/10/04 11:10

まず、コードは「マークダウン」という書き方をご利用ください。マークダウンに付きましてはヘルプを参照してください。 また、コードは出来る限りコピペによって実行可能な状態でお願いします。実際に動作させる場合に、付け加えたり削除したりしなければならない部分が多いほど、ご質問の現象が再現できない可能性が多くなります。 画面の状態等は、実際に動作させた画像をご提示頂いたり、理想とする表示を(手書きでも切り貼りでも)画像としてご提示頂いたほうが、言葉での説明よりも分かり易い場合がありますので、ご検討頂けると助かります。
guest

回答1

0

ベストアンサー

AlertDialog.Builder の記述が繋げて書いてあるので分かり難いですが、分解してしまえば分かり易いかと思います。

java

1import androidx.appcompat.app.*; 2 3import android.os.Bundle; 4import android.view.View; 5import android.widget.*; 6 7public class MainActivity extends AppCompatActivity { 8 @Override 9 protected void onCreate(Bundle savedInstanceState) { 10 super.onCreate(savedInstanceState); 11 setContentView(R.layout.activity_main); 12 13 String[] str = {"位置情報", "カメラ", "カレンダー"}; 14 String[] msg = {"Android端末の位置情報を取得する権限です。\n" + 15 "位置情報サービスを使用するアプリは、ユーザーのプライバシーを保護するために、位置情報へのアクセスをリクエストする必要があります。\n" + 16 "多くのアプリで求められる権限ですが、位置情報を収集して別の目的に利用するといった不正アプリなどもあるので注意しましょう。", 17 "(省略)", 18 "(省略)" 19 }; 20 21 ListView lv = findViewById(R.id.lv); 22 23 ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, str); 24 lv.setAdapter(adapter); 25 26 lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 27 @Override 28 public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 29 AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 30 builder.setTitle(str[position] + "の権限説明"); 31 builder.setMessage(msg[position]); 32 builder.setPositiveButton("閉じる", null); 33 if(position == 0) { 34 builder.setNegativeButton("位置情報取得へ", null); 35 } 36 builder.setIcon(R.mipmap.ic_launcher); 37 builder.show(); 38 } 39 }); 40 } 41}

投稿2021/10/04 11:35

jimbe

総合スコア12646

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

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

tt3415

2021/10/04 15:44 編集

ありがとうございます! 一つ目にのみ反映させることができました! 質問の仕方について、分かりやすいようにするよう気をつけます!
jimbe

2021/10/04 15:24

adapter の定義・レイアウトの定義に関しましては、ご提示のコードに無かったのでこちらで勝手に想像した状態になっていますし、どのようなコードに書き換えられたのか分かりませんのでお答えできません。 このような状況も想定してご質問へのコメントも書かせて頂いています。 基本的にこのコードは AlertDialog.Builder の利用に関する部分の例として作成していますので、その他の部分に関しましては tt3415 さんオリジナルのコードのほうを優先して頂くしかありません。
tt3415

2021/10/04 15:45

jimbeさん レイアウトも変更することができました! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問