2017-09-01 23 views
0

を使用していていても、「あなたはこれでTheme.AppCompatのテーマ(または子孫)を使用する必要があります」 。エラーを取得するタイトルが言うように、私はエラーを得続ける私はTheme.AppCompat

まず、ここでエラー(注:私は、エラーがコメントで発生している行をマークする):取得されたクラスである私はCustomSimpleCursorAdapterを呼ぶのはここ

public class CustomSimpleCursorAdapter extends SimpleCursorAdapter { 

    private Context context; 
    private Cursor cursor; 
    private MainActivity mainActivity; 

    public CustomSimpleCursorAdapter(Context context, int layout, Cursor cursor, String[] from, int[] to, int flags, MainActivity mainActivity) { 
     super(context, layout, cursor, from, to, flags); 
     this.context = context; 
     this.cursor = cursor; 
     this.mainActivity = mainActivity; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent){ 

     // Grab each row as it is pulled from the db. 
     DatabaseHelper dbHelper = new DatabaseHelper(context); 
     View row = super.getView(position, convertView, parent); 

     cursor.moveToPosition(position); 
     final Integer id = cursor.getInt(cursor.getColumnIndex("_id")); 
     final String personID = cursor.getString(cursor.getColumnIndex("personid")); 

     // Set alternating rows to different colors. 
     if(position % 2 == 0){ 
      row.setBackgroundColor(Color.parseColor(Constants.WHITE)); 
     } else { 
      row.setBackgroundColor(Color.parseColor(Constants.LIGHTGREY)); 
     } 

     // Make the delete button clickable. 
     Button deletePersonButton = (Button)row.findViewById(R.id.remove_person); 
     deletePersonButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       AlertDialog.Builder deleteDialogBuilder = new AlertDialog.Builder(context); 
       deleteDialogBuilder.setTitle("Delete Person " + personID + "?"); 
       deleteDialogBuilder.setMessage("This process is IRREVERSABLE!"); 
       deleteDialogBuilder.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         DatabaseHelper databaseHelper = new DatabaseHelper(context); 
         databaseHelper.deletePerson(personID); 
         mainActivity.dataChanged(); 
         Toast.makeText(context, "Person " + personID + " (ID: " + Integer.toString(id) + ") Deleted", Toast.LENGTH_LONG).show(); 
        } 
       }); 
       deleteDialogBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         dialog.dismiss(); 
        } 
       }); 
       AlertDialog deleteDialog = deleteDialogBuilder.create(); 
       deleteDialog.setIcon(R.drawable.warning); 
       deleteDialog.show(); // This is where I get the error 
      } 
     }); 

     return row; 
    } 
} 

は次のとおりです。

public class Home extends Fragment{ 

    private MainActivity mainActivity; 
    private View rootView; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
     rootView = inflater.inflate(R.layout.home, container, false); 
     mainActivity = (MainActivity)getActivity(); 
     return rootView; 
    } 

    @Override 
    public void onViewCreated(View rootView, Bundle savedInstanceState) { 
     super.onViewCreated(rootView, savedInstanceState); 
     drawThePersonView(); 
    } 

    public void drawThePersonView(){ 
     Context context = mainActivity.getApplicationContext(); 
     DatabaseHelper myDBHelper = new DatabaseHelper(context); 
     Cursor personCursor = myDBHelper.getUndeletedCasualtiesCursor(); 
     String[] fromColumns = {"_id","personID","location","status"}; 
     int[] toViews = {R.id.person_number_textview, R.id.person_personID_textview, R.id.person_location_textview, R.id.person_status_textview}; 
     CustomSimpleCursorAdapter mySimpleCursorAdapter = new CustomSimpleCursorAdapter(context, R.layout.person_layout, personCursor, fromColumns, toViews, 0, mainActivity); 

     ListView myListView = (ListView) rootView.findViewById(R.id.person_row); 

     // Draw the list 
     myListView.setAdapter(mySimpleCursorAdapter); 

     myDBHelper.close(); 
    } 
} 

そして、ここで私ののAndroidManifest.xmlファイルです:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.domain"> 

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

    <application 
     android:allowBackup="true" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme" 
     android:name="com.domain.MyApplication"> 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" 
      android:theme="@style/AppTheme.NoActionBar" 
      android:windowSoftInputMode="adjustPan|stateHidden"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".forms.Form01" 
      android:label="@string/form_01_title" 
      android:theme="@style/AppTheme.NoActionBar" 
      android:windowSoftInputMode="adjustPan|stateHidden" /> 
     <activity 
      android:name=".forms.Form02" 
      android:label="@string/form_02_title" 
      android:theme="@style/AppTheme.NoActionBar" 
      android:windowSoftInputMode="adjustPan|stateHidden" /> 
     <activity 
      android:name=".forms.Form03" 
      android:label="@string/form_03_title" 
      android:theme="@style/AppTheme.NoActionBar" 
      android:windowSoftInputMode="adjustPan|stateHidden" /> 
     <activity 
      android:name=".AddPerson" 
      android:label="@string/title_activity_add_person" 
      android:theme="@style/AppTheme.NoActionBar" /> 
     <activity 
      android:name=".AddItem" 
      android:label="@string/title_activity_add_item" 
      android:theme="@style/AppTheme.NoActionBar" /> 

    </application> 

</manifest> 

上記のマニフェストに投稿しましたが、Theme.AppCompatへの参照はありませんが、ここに投稿する前に変更しました。一度に1つずつ変更してから、Theme.AppCompatに変更しましたが、毎晩エラーが発生しました。Theme.AppCompatです。

これは、エラーのlogcatです:

09-01 13:07:09.457 26231-26231/com.domain E/AndroidRuntime: FATAL EXCEPTION: main 
    Process: com.domain, PID: 26231 
    java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity. 
     at android.support.v7.app.AppCompatDelegateImplV7.createSubDecor(AppCompatDelegateImplV7.java:309) 
     at android.support.v7.app.AppCompatDelegateImplV7.ensureSubDecor(AppCompatDelegateImplV7.java:278) 
     at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:252) 
     at android.support.v7.app.AppCompatDialog.setContentView(AppCompatDialog.java:76) 
     at android.support.v7.app.AlertController.installContent(AlertController.java:216) 
     at android.support.v7.app.AlertDialog.onCreate(AlertDialog.java:240) 
     at android.app.Dialog.dispatchOnCreate(Dialog.java:373) 
     at android.app.Dialog.show(Dialog.java:274) 
     at com.domain.adapters.CustomSimpleCursorAdapter$1.onClick(CustomSimpleCursorAdapter.java:57) 
     at android.view.View.performClick(View.java:4780) 
     at android.view.View$PerformClick.run(View.java:19866) 
     at android.os.Handler.handleCallback(Handler.java:739) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:135) 
     at android.app.ActivityThread.main(ActivityThread.java:5258) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

任意の提案ですか?

ありがとうございます!

+0

'CustomSimpleCursorAdapter'のオブジェクトをどのように作成してlistviewに設定するかを投稿できますか? – chandil03

+0

@ chandil03あなたが要求したコードを追加しました。ありがとう。 – Brian

+0

[このアクティビティでTheme.AppCompatテーマ(またはその子孫)を使用する必要があります]の可能な複製](https://stackoverflow.com/questions/21814825/you-need-to-use-a-theme-appcompat-theme -or-descendant-with-this-activity) – Ibrahim

答えて

1

getApplicationContext()getContext()に変更するだけです。

public void drawThePersonView(){ 
     Context context = getContext(); 
     ... 
     // your stuff 
     ... 
} 

私はこのコードをテストしていません。テストしてお知らせください。

詳しくはUnderstanding Context In Android Applicationをご覧ください。

私はそれが役に立ちそうです。

それはなぜならスタイルで活動してアラートダイアログビルダーを使用するのではありませんでした (Theme.AppCompat) 私は Theme.AppCompatにスタイルを変え、それでも を働いていない私は、あなたが変更したときにアンドロイドスタジオが問題を抱えていることに気づいた。この問題は、すでに私 で起こっ
+0

これは機能しますが、デバイスの向きを変更すると、コンテキストがnullになるという問題が発生しています。だから私は最初にgetApplicationContext()に切り替えました。 – Brian

+0

あなたのフラグメント/アクティビティに複数のレイアウトを使用していない場合は、 'android:configChanges =" keyboardHidden | orientation "をアクティビティに追加して、' onConfigChanges( ) 'メソッドを呼び出します。あなたのコンテキストはnullにはなりません。 – chandil03

0

私はあなたの活動に関連するjavaとxmlのコードをコピーすることをお勧めします。 そしてアクティビティを削除してから同じJavaとxmlでスタイルを再作成してください。Theme.AppCompat もう一つの解決策は、アラートダイアログでは、作成するダイアログのアクティビティを にすることができます。それはより厳格になり、マニフェストファイルではダイアログボックスとして作成したアクティビティがダイアログとして表示されるように、android:theme="@style/Base.Theme.AppCompat.Dialog"などのダイアログアクティビティにテーマを設定できます。

+0

これはちょうど問題が何であるかを知らずにできることを何でもするだけで、あなたの問題を解決することができたのです。上記の答えを読んで本当の問題を知りたければ – chandil03

関連する問題