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