Android 对话框的活动和片段需要不同的主题

Android 对话框的活动和片段需要不同的主题,android,android-fragments,android-theme,android-styles,Android,Android Fragments,Android Theme,Android Styles,我试图从一个片段(mainScreenFragment.java)创建一个对话框。有许多片段是从MainActivity调用的,因为我在这里使用的是选项卡视图,所以我在MainActivity中使用HOLO主题,但是当我尝试创建一个警报框时,片段中显示一个错误:“java.lang.IllegalStateException:此活动需要使用Theme.AppCompat主题(或子代)。” 请告诉我该怎么办 Manifest.xml <?xml version="1.0" encoding=

我试图从一个片段(mainScreenFragment.java)创建一个对话框。有许多片段是从MainActivity调用的,因为我在这里使用的是选项卡视图,所以我在MainActivity中使用HOLO主题,但是当我尝试创建一个警报框时,片段中显示一个错误:“java.lang.IllegalStateException:此活动需要使用Theme.AppCompat主题(或子代)。”

请告诉我该怎么办

Manifest.xml

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

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.Holo">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".songPlay">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
            </intent-filter>
        </activity>

        <service
            android:name=".MusicService"
            android:enabled="true" />

        <activity
            android:name=".mainScreen"
            android:label="@string/title_activity_main_screen"
            android:theme="@style/AppTheme.NoActionBar" />
        <activity
            android:name=".playlistScreen"
            android:label="@string/title_activity_playlist_screen"
            android:theme="@style/AppTheme.NoActionBar" />
        <activity
            android:name=".playlistManager"
            android:label="@string/title_activity_playlist_manager"
            android:theme="@style/AppTheme.NoActionBar" />
        <activity
            android:name=".genreScreen"
            android:label="@string/title_activity_genre_screen"
            android:theme="@style/AppTheme.NoActionBar" />
        <activity
            android:name=".genrelistManager"
            android:label="@string/title_activity_genrelist_manager"
            android:theme="@style/AppTheme.NoActionBar" />
        <activity
            android:name=".albumScreen"
            android:label="@string/title_activity_album_screen"
            android:theme="@style/AppTheme.NoActionBar" />
        <activity
            android:name=".albumScreenManager"
            android:label="@string/title_activity_album_screen_manager"
            android:theme="@style/AppTheme.NoActionBar" />
        <activity
            android:name=".artistScreen"
            android:label="@string/title_activity_artist_screen"
            android:theme="@style/AppTheme.NoActionBar" />
        <activity
            android:name=".artistManager"
            android:label="@string/title_activity_artist_manager"
            android:theme="@style/AppTheme.NoActionBar"></activity>
    </application>

</manifest>
<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>

    <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>

    <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

    <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

    <style name="MyDialogTheme" parent="Theme.AppCompat" />

</resources>

styles.xml

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

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.Holo">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".songPlay">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
            </intent-filter>
        </activity>

        <service
            android:name=".MusicService"
            android:enabled="true" />

        <activity
            android:name=".mainScreen"
            android:label="@string/title_activity_main_screen"
            android:theme="@style/AppTheme.NoActionBar" />
        <activity
            android:name=".playlistScreen"
            android:label="@string/title_activity_playlist_screen"
            android:theme="@style/AppTheme.NoActionBar" />
        <activity
            android:name=".playlistManager"
            android:label="@string/title_activity_playlist_manager"
            android:theme="@style/AppTheme.NoActionBar" />
        <activity
            android:name=".genreScreen"
            android:label="@string/title_activity_genre_screen"
            android:theme="@style/AppTheme.NoActionBar" />
        <activity
            android:name=".genrelistManager"
            android:label="@string/title_activity_genrelist_manager"
            android:theme="@style/AppTheme.NoActionBar" />
        <activity
            android:name=".albumScreen"
            android:label="@string/title_activity_album_screen"
            android:theme="@style/AppTheme.NoActionBar" />
        <activity
            android:name=".albumScreenManager"
            android:label="@string/title_activity_album_screen_manager"
            android:theme="@style/AppTheme.NoActionBar" />
        <activity
            android:name=".artistScreen"
            android:label="@string/title_activity_artist_screen"
            android:theme="@style/AppTheme.NoActionBar" />
        <activity
            android:name=".artistManager"
            android:label="@string/title_activity_artist_manager"
            android:theme="@style/AppTheme.NoActionBar"></activity>
    </application>

</manifest>
<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>

    <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>

    <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

    <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

    <style name="MyDialogTheme" parent="Theme.AppCompat" />

</resources>

@颜色/原色
@颜色/原色暗
@颜色/颜色重音
假的
真的
MainActivity.java

public class MainActivity extends FragmentActivity implements ActionBar.TabListener {

int check=0;
private ViewPager viewPager;
private tabViewAdapter tabPagerAdapter;
private ActionBar actionBar;
private String[] tabNames = { "Genres", "Playlists", "All Songs", "Albums", "Artists" };


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    viewPager = (ViewPager) findViewById(R.id.viewPager);
    tabPagerAdapter = new tabViewAdapter(getSupportFragmentManager());
    viewPager.setAdapter(tabPagerAdapter);
    viewPager.setOffscreenPageLimit(5);
    actionBar = getActionBar();
    actionBar.setHomeButtonEnabled(true);
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    for (int i = 0; i < 5 ; i++) {
        actionBar.addTab(actionBar.newTab().setText(tabNames[i])
                .setTabListener(this));
    }
    viewPager.setCurrentItem(2);
    actionBar.setSelectedNavigationItem(2);
    viewPager.setOnPageChangeListener(new OnPageChangeListener() {
        @Override
        public void onPageSelected(int postion) {
            check = postion;
            actionBar.setSelectedNavigationItem(postion);
        }
        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
        }
        @Override
        public void onPageScrollStateChanged(int arg0) {
        }
    });
}

@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
    viewPager.setCurrentItem(tab.getPosition());
}

@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
}

@Override
public void onBackPressed() {
    if((mainScreenFragment.menu).getVisibility()==View.VISIBLE)
        (mainScreenFragment.menu).setVisibility(View.INVISIBLE);
    else
        moveTaskToBack(true);
}
}
private View.OnClickListener menuButton = new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        Log.v("CheckMENU", "Working!!");

        switch (v.getId()) {
            case R.id.add: {
                Log.v("CheckMENUAdd", "Working!!");

                final SQLiteDatabase mydatabase = getActivity().openOrCreateDatabase("beats_playlists", android.content.Context.MODE_PRIVATE, null);
                mydatabase.execSQL("CREATE TABLE IF NOT EXISTS playlists(playlistName VARCHAR PRIMARY KEY);");

                List<String> playlists = new ArrayList<String>();
                Cursor cursor = mydatabase.rawQuery("SELECT * FROM playlists", null);
                playlists.add("Create new");
                if(cursor.moveToFirst()) {
                    while(cursor.isAfterLast()==false) {
                        String name = cursor.getString(cursor
                                .getColumnIndex("playlistName"));

                        playlists.add(name);
                        cursor.moveToNext();
                    }
                }
                cursor.close();

                final CharSequence[] playlistsData = playlists.toArray(new String[playlists.size()]);
                final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity(), R.style.MyDialogTheme);
                dialogBuilder.setTitle("Add to playlist");
                dialogBuilder.setItems(playlistsData, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int item) {
                        String selectedText = playlistsData[item].toString();

                        if(selectedText.equals("Create new")){
                            final String[] playlistName = {""};
                            AlertDialog.Builder alertDialog = new AlertDialog.Builder(getActivity());
                            alertDialog.setTitle("Create new");

                            final EditText input = new EditText(getActivity());
                            LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
                                    LinearLayout.LayoutParams.MATCH_PARENT,
                                    LinearLayout.LayoutParams.MATCH_PARENT);
                            input.setLayoutParams(lp);
                            alertDialog.setView(input);

                            alertDialog.setPositiveButton("Create",
                                    new DialogInterface.OnClickListener() {
                                        public void onClick(DialogInterface dialog, int which) {
                                            playlistName[0] = input.getText().toString();
                                            if(!playlistName[0].equals("")) {
                                                try {
                                                    mydatabase.execSQL("INSERT INTO playlists VALUES(\'" + playlistName[0].trim() + "\');");
                                                    mydatabase.execSQL("CREATE TABLE " + playlistName[0].trim() + "(songPath varchar PRIMARY KEY)");
                                                    mydatabase.execSQL("INSERT INTO " + playlistName[0].trim() + " VALUES(\'" + songPath + "\');");
                                                }
                                                catch (Exception e) {
                                                    Toast.makeText(getActivity(),
                                                            "Playlist already exist", Toast.LENGTH_SHORT).show();
                                                }
                                            }
                                        }
                                    });

                            alertDialog.setNegativeButton("Cancel",
                                    new DialogInterface.OnClickListener() {
                                        public void onClick(DialogInterface dialog, int which) {
                                            dialog.cancel();
                                        }
                                    });

                            alertDialog.show();
                        }

                        else {
                            try {
                                mydatabase.execSQL("INSERT INTO " + selectedText + " VALUES(\'" + songPath + "\');");
                            }
                            catch (Exception e){
                                Toast.makeText(getActivity(),
                                        "Track exists in this playlist", Toast.LENGTH_SHORT).show();
                            }
                        }
                    }
                });


                AlertDialog alertDialogObject = dialogBuilder.create();
                alertDialogObject.show();
                Window window = alertDialogObject.getWindow();
                window.setLayout(ActionBar.LayoutParams.MATCH_PARENT, 300);

                break;
            }
        }
    }
};
public类MainActivity扩展FragmentActivity实现ActionBar.TabListener{
整数检查=0;
私人视页机视页机;
专用tabViewAdapter tabPagerAdapter;
私人ActionBar ActionBar;
私有字符串[]标签名={“流派”、“播放列表”、“所有歌曲”、“专辑”、“艺术家”};
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager=(viewPager)findViewById(R.id.viewPager);
tabPagerAdapter=新的tabViewAdapter(getSupportFragmentManager());
viewPager.setAdapter(tabPagerAdapter);
viewPager.setOffscreenPageLimit(5);
actionBar=getActionBar();
actionBar.setHomeButtonEnabled(真);
actionBar.setNavigationMode(actionBar.NAVIGATION\u MODE\u选项卡);
对于(int i=0;i<5;i++){
actionBar.addTab(actionBar.newTab().setText(tabNames[i])
.setTabListener(本));
}
viewPager.setCurrentItem(2);
actionBar.setSelectedNavigationItem(2);
viewPager.setOnPageChangeListener(新的OnPageChangeListener(){
@凌驾
已选择公共作废页面(内部过帐){
检查=定位;
actionBar.setSelectedNavigationItem(定位);
}
@凌驾
已滚动页面上的公共void(int arg0、float arg1、int arg2){
}
@凌驾
公共无效onPageScrollStateChanged(int arg0){
}
});
}
@凌驾
已重新选择公共无效页签(页签,碎片事务){
}
@凌驾
已选择的公共事务(选项卡,碎片事务ft){
setCurrentItem(tab.getPosition());
}
@凌驾
已选择公共空页(选项卡,碎片事务ft){
}
@凌驾
public void onBackPressed(){
if((mainScreenFragment.menu).getVisibility()==View.VISIBLE)
(mainScreenFragment.menu).setVisibility(View.INVISIBLE);
其他的
moveTaskToBack(真);
}
}
mainScreenFragment.java

public class MainActivity extends FragmentActivity implements ActionBar.TabListener {

int check=0;
private ViewPager viewPager;
private tabViewAdapter tabPagerAdapter;
private ActionBar actionBar;
private String[] tabNames = { "Genres", "Playlists", "All Songs", "Albums", "Artists" };


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    viewPager = (ViewPager) findViewById(R.id.viewPager);
    tabPagerAdapter = new tabViewAdapter(getSupportFragmentManager());
    viewPager.setAdapter(tabPagerAdapter);
    viewPager.setOffscreenPageLimit(5);
    actionBar = getActionBar();
    actionBar.setHomeButtonEnabled(true);
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    for (int i = 0; i < 5 ; i++) {
        actionBar.addTab(actionBar.newTab().setText(tabNames[i])
                .setTabListener(this));
    }
    viewPager.setCurrentItem(2);
    actionBar.setSelectedNavigationItem(2);
    viewPager.setOnPageChangeListener(new OnPageChangeListener() {
        @Override
        public void onPageSelected(int postion) {
            check = postion;
            actionBar.setSelectedNavigationItem(postion);
        }
        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
        }
        @Override
        public void onPageScrollStateChanged(int arg0) {
        }
    });
}

@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
    viewPager.setCurrentItem(tab.getPosition());
}

@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
}

@Override
public void onBackPressed() {
    if((mainScreenFragment.menu).getVisibility()==View.VISIBLE)
        (mainScreenFragment.menu).setVisibility(View.INVISIBLE);
    else
        moveTaskToBack(true);
}
}
private View.OnClickListener menuButton = new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        Log.v("CheckMENU", "Working!!");

        switch (v.getId()) {
            case R.id.add: {
                Log.v("CheckMENUAdd", "Working!!");

                final SQLiteDatabase mydatabase = getActivity().openOrCreateDatabase("beats_playlists", android.content.Context.MODE_PRIVATE, null);
                mydatabase.execSQL("CREATE TABLE IF NOT EXISTS playlists(playlistName VARCHAR PRIMARY KEY);");

                List<String> playlists = new ArrayList<String>();
                Cursor cursor = mydatabase.rawQuery("SELECT * FROM playlists", null);
                playlists.add("Create new");
                if(cursor.moveToFirst()) {
                    while(cursor.isAfterLast()==false) {
                        String name = cursor.getString(cursor
                                .getColumnIndex("playlistName"));

                        playlists.add(name);
                        cursor.moveToNext();
                    }
                }
                cursor.close();

                final CharSequence[] playlistsData = playlists.toArray(new String[playlists.size()]);
                final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity(), R.style.MyDialogTheme);
                dialogBuilder.setTitle("Add to playlist");
                dialogBuilder.setItems(playlistsData, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int item) {
                        String selectedText = playlistsData[item].toString();

                        if(selectedText.equals("Create new")){
                            final String[] playlistName = {""};
                            AlertDialog.Builder alertDialog = new AlertDialog.Builder(getActivity());
                            alertDialog.setTitle("Create new");

                            final EditText input = new EditText(getActivity());
                            LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
                                    LinearLayout.LayoutParams.MATCH_PARENT,
                                    LinearLayout.LayoutParams.MATCH_PARENT);
                            input.setLayoutParams(lp);
                            alertDialog.setView(input);

                            alertDialog.setPositiveButton("Create",
                                    new DialogInterface.OnClickListener() {
                                        public void onClick(DialogInterface dialog, int which) {
                                            playlistName[0] = input.getText().toString();
                                            if(!playlistName[0].equals("")) {
                                                try {
                                                    mydatabase.execSQL("INSERT INTO playlists VALUES(\'" + playlistName[0].trim() + "\');");
                                                    mydatabase.execSQL("CREATE TABLE " + playlistName[0].trim() + "(songPath varchar PRIMARY KEY)");
                                                    mydatabase.execSQL("INSERT INTO " + playlistName[0].trim() + " VALUES(\'" + songPath + "\');");
                                                }
                                                catch (Exception e) {
                                                    Toast.makeText(getActivity(),
                                                            "Playlist already exist", Toast.LENGTH_SHORT).show();
                                                }
                                            }
                                        }
                                    });

                            alertDialog.setNegativeButton("Cancel",
                                    new DialogInterface.OnClickListener() {
                                        public void onClick(DialogInterface dialog, int which) {
                                            dialog.cancel();
                                        }
                                    });

                            alertDialog.show();
                        }

                        else {
                            try {
                                mydatabase.execSQL("INSERT INTO " + selectedText + " VALUES(\'" + songPath + "\');");
                            }
                            catch (Exception e){
                                Toast.makeText(getActivity(),
                                        "Track exists in this playlist", Toast.LENGTH_SHORT).show();
                            }
                        }
                    }
                });


                AlertDialog alertDialogObject = dialogBuilder.create();
                alertDialogObject.show();
                Window window = alertDialogObject.getWindow();
                window.setLayout(ActionBar.LayoutParams.MATCH_PARENT, 300);

                break;
            }
        }
    }
};
private View.OnClickListener菜单按钮=new View.OnClickListener(){
@凌驾
公共void onClick(视图v){
Log.v(“检查菜单”,“工作!!”);
开关(v.getId()){
案例R.id.add:{
Log.v(“CheckMENUAdd”,“Working!!”);
最终SQLiteDatabase mydatabase=getActivity().openOrCreateDatabase(“beats_playlists”,android.content.Context.MODE_PRIVATE,null);
execSQL(“如果不存在播放列表,则创建表(播放名称VARCHAR主键);”;
列表播放列表=新建ArrayList();
Cursor Cursor=mydatabase.rawQuery(“从播放列表中选择*”,null);
播放列表。添加(“新建”);
if(cursor.moveToFirst()){
while(cursor.isAfterLast()==false){
字符串名称=cursor.getString(cursor
.getColumnIndex(“播放名”);
播放列表。添加(名称);
cursor.moveToNext();
}
}
cursor.close();
final CharSequence[]playlistdata=playlists.toArray(新字符串[playlists.size());
final AlertDialog.Builder dialogBuilder=新建AlertDialog.Builder(getActivity(),R.style.MyDialogTheme);
dialogBuilder.setTitle(“添加到播放列表”);
dialogBuilder.setItems(playlistData,新的DialogInterface.OnClickListener(){
公共void onClick(对话框接口对话框,int项){
字符串selectedText=playlistdata[item].toString();
if(selectedText.equals(“新建”)){
最后一个字符串[]播放名={”“};
AlertDialog.Builder AlertDialog=新建AlertDialog.Builder(getActivity());
alertDialog.setTitle(“新建”);
最终编辑文本输入=新编辑文本(getActivity());
LinearLayout.LayoutParams lp=新的LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_父级,
LinearLayout.LayoutParams.MATCH_PARENT);
input.setLayoutParams(lp);
alertDialog.setView(输入);
alertDialog.setPositiveButton(“创建”,
新建DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int which){
PlayName[0]=input.getText().toString();
如果(!playlName[0]。等于(“”){
试一试{
M