recyclerviewでリストを作成してリストの1つをタップした時に
Dialogが起ち上がるアプリを作っています。
まず
MainActivity上にClicklistnenerでボタンを設置しました。
次に
Adapter内にもClicklistnenerを設置してrecyclerviewのリストを押した時に
Dialogが起ち上がるようにしました。
しかしMainActivity上にボタンをした時は問題なくDialogが起ちあがるのですが
recyclerviewのリストをタップすると下記のエラーが出て落ちてしまいます。
error内容
java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
このエラーをネット検索で調べるとたくさん質問が出ていて回答もたくさんありました。
回答のほとんどがstyle.xmlとAndroidManifestのAppThemeをTheme.AppCompatに修正すれば
直ると言うのでしたが試しても解決しませんでした。
備考)
Adapter.javaはActivityではないのでcontextがないためMyApplication.javaを作って
MyApplication.getmContext().getApplicationContext()で
contextを取得してalertDialogBuilderに設置しました。
どうやらこれが怪しいのですがActivityクラスではないのでMainActivity.thisのような
contextの取得ができません。
(試しにMainActivityのDialogもcontextを
MyApplication.getmContext().getApplicationContext()にしたら落ちました。
質問は
・どういうcontextを設置(もしくは他の部分の間違っている部分の修正を)したら
Adapter.javaのDialogは落ちないのか?
・どうしてDialogにMyApplication.getmContext().getApplicationContext()を
設置したら落ちてしまうのか?
分かる方教えて下さい。よろしくお願いします。
MainActivity.java
Button addButton = (Button)findViewById(R.id.addButton); addButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(MainActivity.this); alertDialogBuilder .setTitle("くじの結果追加") .setMessage("くじの結果内容を入力する") .setPositiveButton("保存", null) .setNegativeButton("キャンセル", null); AlertDialog alertDialog = alertDialogBuilder.create(); alertDialog.show();
Adapter.java内(抜粋)
@Override public void onBindViewHolder(final KujiViewHolder holder, final int listposition) { holder.kujiContents.setText(npwDataSet.get(listposition).getKuji_contents()); holder.kujiNumber.setText(npwDataSet.get(listposition).getKuji_number()); holder.base.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(MyApplication.getmContext().getApplicationContext()); alertDialogBuilder .setTitle("くじの結果追加") .setMessage("くじの結果内容を入力する") .setPositiveButton("保存", null) .setNegativeButton("キャンセル", null); AlertDialog alertDialog = alertDialogBuilder.create(); alertDialog.show();
MyApplication.java
public class MyApplication extends Application { private static Context mContext; @Override public void onCreate(){ super.onCreate(); mContext = this; } public static Context getmContext(){ return mContext; } }
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.XXXX.scratchmakerapp"> <application android:name=".MyApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.AppCompat.Light"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".ResultActivity" /> <activity android:name=".SettingActivity"></activity> </application>
res/values/styles.xml
<resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> </resources>
環境 os mac
開発環境 Android studio 2.2.3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/12 01:17
2017/09/13 01:07
2017/09/13 07:29