片段和浏览页面的首选项-Android
让我自己彻底被一大堆看起来相关的标签弄糊涂了,但没有完全回答我的问题,所以最后我承认失败并问我自己的问题 我想实现一个设置页面。我使用的是片段和一个ViewPager,因为我有两个主屏幕在同一个标题和操作栏下运行(编码和解码屏幕)。下面是我的代码片段(试图去掉看似无关的部分) MainActivity.java片段和浏览页面的首选项-Android,android,android-fragments,android-viewpager,preferences,Android,Android Fragments,Android Viewpager,Preferences,让我自己彻底被一大堆看起来相关的标签弄糊涂了,但没有完全回答我的问题,所以最后我承认失败并问我自己的问题 我想实现一个设置页面。我使用的是片段和一个ViewPager,因为我有两个主屏幕在同一个标题和操作栏下运行(编码和解码屏幕)。下面是我的代码片段(试图去掉看似无关的部分) MainActivity.java package uk.ac.ox.bras2756.colourgrid; import android.app.ActionBar; ...etc public class Mai
package uk.ac.ox.bras2756.colourgrid;
import android.app.ActionBar; ...etc
public class MainActivity extends FragmentActivity implements ActionBar.TabListener {
AppSectionsPagerAdapter mAppSectionsPagerAdapter;
ViewPager mViewPager; ...etc
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAppSectionsPagerAdapter = new AppSectionsPagerAdapter(getSupportFragmentManager());
final ActionBar actionBar = getActionBar();
actionBar.setHomeButtonEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mAppSectionsPagerAdapter);
mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
}
});
for (int i = 0; i < mAppSectionsPagerAdapter.getCount(); i++) {
actionBar.addTab(
actionBar.newTab()
.setText(mAppSectionsPagerAdapter.getPageTitle(i))
.setTabListener(this));
}
}
@Override
public void onTabUnselected / Selected / Reselected ...etc
public static class AppSectionsPagerAdapter extends FragmentPagerAdapter {
public AppSectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
switch (i) {
case 0:...etc
}
}
public static class LaunchpadSectionFragmentEncode extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_section_encode, container, false);
...return rootView;
}
}
public static class LaunchpadSectionFragmentDecode extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_section_decode, container, false);
...return rootView;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
new MenuInflater(this).inflate(R.menu.activity_main, menu);
return(super.onCreateOptionsMenu(menu));
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_settings:
Intent intent = new Intent(this, SetPreferenceActivity.class);
startActivity(intent);
return(true);
}
return(super.onOptionsItemSelected(item));
}
}
}
package uk.ac.ox.bras2756.colourgrid;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class SetPreferenceActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
Log.i("SetPrefs", "Got there");
getFragmentManager().beginTransaction().replace(android.R.id.content, new PrefsFragment()).commit();
}
}
SetPreferenceActivity.java
package uk.ac.ox.bras2756.colourgrid;
import android.app.ActionBar; ...etc
public class MainActivity extends FragmentActivity implements ActionBar.TabListener {
AppSectionsPagerAdapter mAppSectionsPagerAdapter;
ViewPager mViewPager; ...etc
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAppSectionsPagerAdapter = new AppSectionsPagerAdapter(getSupportFragmentManager());
final ActionBar actionBar = getActionBar();
actionBar.setHomeButtonEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mAppSectionsPagerAdapter);
mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
}
});
for (int i = 0; i < mAppSectionsPagerAdapter.getCount(); i++) {
actionBar.addTab(
actionBar.newTab()
.setText(mAppSectionsPagerAdapter.getPageTitle(i))
.setTabListener(this));
}
}
@Override
public void onTabUnselected / Selected / Reselected ...etc
public static class AppSectionsPagerAdapter extends FragmentPagerAdapter {
public AppSectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
switch (i) {
case 0:...etc
}
}
public static class LaunchpadSectionFragmentEncode extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_section_encode, container, false);
...return rootView;
}
}
public static class LaunchpadSectionFragmentDecode extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_section_decode, container, false);
...return rootView;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
new MenuInflater(this).inflate(R.menu.activity_main, menu);
return(super.onCreateOptionsMenu(menu));
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_settings:
Intent intent = new Intent(this, SetPreferenceActivity.class);
startActivity(intent);
return(true);
}
return(super.onOptionsItemSelected(item));
}
}
}
package uk.ac.ox.bras2756.colourgrid;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class SetPreferenceActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
Log.i("SetPrefs", "Got there");
getFragmentManager().beginTransaction().replace(android.R.id.content, new PrefsFragment()).commit();
}
}
res\xml\preferences.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<CheckBoxPreference
android:key="prefkey_error"
android:summary="@string/pref_sum_error"
android:title="@string/pref_title_error"
android:defaultValue="true" />
<PreferenceCategory
android:title="@string/pref_decode"
android:key="prefkey_decode">
<ListPreference
android:key="prefkey_matrix"
android:title="@string/pref_title_matrix"
android:summary="@string/pref_sum_matrix"
android:entries="@array/matrixArray"
android:entryValues="@array/matrixArrayValues" />
<ListPreference
android:key="prefkey_rotate"
android:title="@string/pref_title_rotate"
android:summary="@string/pref_sum_rotate"
android:entries="@array/rotateArray"
android:entryValues="@array/rotateArrayValues" />
<CheckBoxPreference
android:key="prefkey_weight"
android:summary="@string/pref_sum_weight"
android:title="@string/pref_title_weight"
android:defaultValue="true" />
<ListPreference
android:key="prefkey_colour"
android:title="@string/pref_title_colour"
android:entries="@array/colourArray"
android:entryValues="@array/colourArrayValues" />
</PreferenceCategory>
<PreferenceCategory
android:title="@string/pref_camera"
android:key="prefkey_camera">
<CheckBoxPreference
android:key="prefkey_hotspots"
android:title="@string/pref_title_hotspots"
android:defaultValue="true" />
</PreferenceCategory>
</PreferenceScreen>
我的应用程序加载正常,但当然是因为缺少一些东西,所以“选项”按钮没有显示出来。我错过了什么?我会在这里不断检查,直到我可以解决这个问题-在一个紧张的时间表
此外,由于某些原因,我的首选项文件旁边总是有*表示未保存,并且当我在手机上运行应用程序时,它总是要求我先保存,尽管手动保存。不知道那里发生了什么事
如果您需要查看更多的代码,请告诉我,并尝试提供所需的内容,但我不是100%确定
编辑:
都分类好了。更新了上面的代码,以防它能帮助其他人
另外,我还没有OnCreateOptions菜单,我不知道该放在哪里,该放什么
“三点按钮”与偏好完全无关。这就是操作栏溢出(在缺少菜单按钮的设备上可以看到)。您需要编写一些代码,通常是一个XML资源,以获得出现在操作栏溢出中的内容,例如指向您的首选项活动的“要去的项目”链接
例如,您可能有一个res/menu/actions.xml
:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/settings" android:icon="@android:drawable/ic_menu_preferences" android:title="@string/settings" android:showAsAction="never"></item>
</menu>
在注释指示的地方,您可以调用首选项活动的startActivity()
,该活动将使用您的首选项片段
您可以在中阅读更多关于操作栏的信息,也可以在中阅读更多关于首选项活动的信息。“我想在操作栏上添加三点首选项按钮,现在每个人都有这些按钮”--如果您指的是操作栏溢出,“三点按钮”将仅适用于缺少专用菜单按钮的设备:另外,如果这确实是您所指的,请在您配置操作栏的地方发布代码(例如,onCreateOptions菜单()
)。也许我找三个点是错误的,我只是希望我的首选项页面可以在某个地方单击,这样我就可以让用户选择应用程序使用的选项,我可以使用菜单按钮。另外,我还没有OnCreateOptions菜单,我不知道该放在哪里,该放什么。谢谢你的输入。我会研究一下你的建议,然后回来。我正在调用newsetpreferenceactivity()代码>这里你说“launch PreferenceActivity here”,但是在SetPreferenceActivity类中添加了一个日志之后,我可以看到我们在代码中从来没有做到这一点。我做错了什么?@David:你不能通过构造函数启动活动。你可以通过startActivity()
开始新的活动:谁是numpty?我是!我想我需要睡一觉——谢谢你留下来指出显而易见的问题。我的设置屏幕现在,非常感谢@大卫:“谁是裸体?”(在谷歌上快速搜索“裸体”的定义)嗯,我,比我喜欢的更多。很高兴它现在对你有用。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
new MenuInflater(this).inflate(R.menu.actions, menu);
return(super.onCreateOptionsMenu(menu));
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.settings:
// launch your PreferenceActivity here
return(true);
}
return(super.onOptionsItemSelected(item));
}