gpt4 book ai didi

android - 无法从 ActionBarActivity 切换 PreferenceFragment

转载 作者:行者123 更新时间:2023-11-29 17:40:30 25 4
gpt4 key购买 nike

您好,我有一个扩展 ActionBarActivity 的 Activity 。这个有一个使用 PagerSlidingTabStrip 库的 ViewPager。我正在使用 AppCompat v21,所以我需要扩展 ActionBarActivity 才能使用工具栏。顺便说一下.. 我有两个 PreferenceFragment 需要放在这个 viewpager 中。

    import com.astuetz.PagerSlidingTabStrip;
import com.zst.app.multiwindowsidebar.preference.*;
import com.zst.app.multiwindowsidebar.sidebar.SidebarService;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.Toolbar;
import android.transition.Explode;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;
import android.annotation.SuppressLint;
import android.content.Intent;
//import android.support.v13.app.FragmentPagerAdapter;

public class MainActivity extends FragmentActivity {
public static final int MENU_TOGGLE = 1;

public enum PAGES {
MAIN(0),
APPEARENCE(1);

final int position;
PAGES(int pos) {
position = pos;
}
};

MyPagerAdapter mPageAdapter;

// Add
Toolbar toolbar;
public static PagerSlidingTabStrip tabs;
public ViewPager pager;

@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
getWindow().setEnterTransition( new Explode() );
getWindow().setExitTransition( new Explode() );
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tabbed);
toolbar = (Toolbar) findViewById(R.id.toolbar);

mPageAdapter = new MyPagerAdapter(getSupportFragmentManager());

pager = (ViewPager)findViewById(R.id.pager);
tabs = (PagerSlidingTabStrip)findViewById(R.id.tabs);

pager.setAdapter(mPageAdapter);
tabs.setViewPager(pager);

pager.setOffscreenPageLimit(2);

mPageAdapter.notifyDataSetChanged();
pager.invalidate();
}

// My adapter
public class MyPagerAdapter extends FragmentPagerAdapter {

private final String[] TITLES = { "Home", "Interfaccia" };

public MyPagerAdapter(FragmentManager fm) {
super(fm);
}

@Override
public CharSequence getPageTitle(int position) {
return TITLES[position];
}

@Override
public int getCount() {
return TITLES.length;
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;

}


@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new MainPrefFragment();
case 1:
return new AppearencePrefFragment();

}

return null;
}
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(Menu.NONE, MENU_TOGGLE, 0, R.string.pref_toggle_service_title)
.setIcon(SidebarService.isRunning ?
R.drawable.ic_menu_toggle_off : R.drawable.ic_menu_toggle_on)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case MENU_TOGGLE:
if (SidebarService.isRunning) {
SidebarService.stopSidebar(this);
item.setIcon(R.drawable.ic_menu_toggle_on);
} else {
startService(new Intent(this, SidebarService.class));
item.setIcon(R.drawable.ic_menu_toggle_off);
}
}
return super.onOptionsItemSelected(item);
}

}

但我收到如下错误:类型不匹配:无法从 AppearencePrefFragment 转换为 Fragment ...我该怎么做?

ps: 我尝试导入 support-v13 但似乎与 v7 冲突

最佳答案

您可以将 PreferenceFragmentgetFragmentManager 一起使用,即使您正在使用 ActionBarActivity(当然是在 11 以上的 API 上)。

But i get errors like: Type mismatch: cannot convert from AppearencePrefFragment to Fragment ...

问题是 FragmentPagerAdapter 只接受 fragment 管理器的支持或 native 实现。这意味着您不能在寻呼机内组合原生 fragment 和支持 fragment 。

选项 1:使用 native (咳咳……我的意思是支持 v13)FragmentPagerAdapter 并将所有 fragment 转换为 native 。

虽然原生 fragment 实现中存在一些因 API 而异的错误,但我不会选择此选项。

选项 2:使用支持 (support-v4) FragmentPagerAdapterPreferenceFragment 的支持版本。

在您的模块 build.gradle 文件中添加以下依赖项

compile('com.android.support:support-v4-preferencefragment:1.+@aar') {
exclude module: 'support-v4'
}

将它的存储库添加到您的项目 build.gradle 文件

allprojects {
repositories {
mavenLocal()
maven {
// this is the one
url "https://raw.github.com/kolavar/android-support-v4-preferencefragment/master/maven-repository/"
}
jcenter()
}
}

最后让您的偏好 fragment 扩展 android.support.v4.preference.PreferenceFragment 而不是 android.preference.PreferenceFragment。请注意,尽管它的名字不是官方的反向移植,但我已经相当成功地使用它一段时间了。

关于android - 无法从 ActionBarActivity 切换 PreferenceFragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28974725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com