【发布时间】:2014-05-24 00:21:14
【问题描述】:
我正在尝试通过单击操作栏上的项目来使用共享首选项保存文本。但是,字符串必须在应用的 OnCreate 中生成,否则会导致应用崩溃。但是您不能在 On Create 中放置方法,因此 onOptionItemSelected 或 OnClick 中的共享首选项无法在应用程序中找到字符串。我知道这听起来很令人困惑,所以如果您需要澄清,请询问。
这里是代码
package com.bernard.beaconportal;
import java.lang.reflect.Field;
import com.actionbarsherlock.app.SherlockFragment;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;
import com.astuetz.PagerSlidingTabStrip;
import com.bernard.beaconportal.FragmentsLinked.ViewPagerAdapterScheduleView;
import android.view.View.OnClickListener;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
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.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
public class FragmentsEdit extends FragmentActivity {
private ViewPager pager;
private ViewPagerAdapterSchedule adapter;
private PagerSlidingTabStrip tabs;
String uriString;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActionBar().setDisplayHomeAsUpEnabled(true);
setContentView(R.layout.viewpager_schedule);
pager = (ViewPager) findViewById(R.id.viewPager1);
adapter = new ViewPagerAdapterSchedule(getSupportFragmentManager());
tabs = (PagerSlidingTabStrip) findViewById(R.id.pagerTabStrip1);
pager.setAdapter(adapter);
tabs.setViewPager(pager);
Intent intents = getIntent();
String GFriday = intents.getStringExtra("G_Friday");
String BFriday = intents.getStringExtra("B_Friday");
String ADV1Friday = intents.getStringExtra("ADV1_Friday");
String ADV2Friday = intents.getStringExtra("ADV2_Friday");
String CFriday = intents.getStringExtra("C_Friday");
String FFriday = intents.getStringExtra("F_Friday");
Button button = (Button) findViewById(R.menu.android_apply);
button.setOnClickListener(new OnClickListener() {
public void onClick(View view){
SharedPreferences sharedPref = getApplicationContext().getSharedPreferences("schedule",Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString("G_Friday", GFriday);
editor.putString("B_Friday", BFriday);
editor.putString("ADV1_Friday", ADV1Friday);
editor.putString("ADV2_Friday", ADV2Friday);
editor.putString("C_Friday", CFriday);
editor.putString("F_Friday", FFriday);
editor.commit();
}
});
}
public class ViewPagerAdapterSchedule extends FragmentPagerAdapter {
// Declare the number of ViewPager pages
final int PAGE_COUNT = 5;
private String titles[] = new String[] { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" };
public ViewPagerAdapterSchedule(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
// Open FragmentTab1.java
case 0:
Monday schedule_list_view = new Monday();
return schedule_list_view;
// Open FragmentTab2.java
case 1:
Tuesday schedule_list_view1 = new Tuesday();
return schedule_list_view1;
case 2:
Wednesday schedule_list_view2 = new Wednesday();
return schedule_list_view2;
case 3:
Thursday schedule_list_view3 = new Thursday();
return schedule_list_view3;
case 4:
Friday schedule_list_view4 = new Friday();
return schedule_list_view4;
}
return null;
}
public CharSequence getPageTitle(int position) {
return titles[position];
}
@Override
public int getCount() {
return PAGE_COUNT;
}
}
public boolean onCreateOptionsMenu(android.view.Menu menu) {
android.view.MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.android_apply, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(android.view.MenuItem item) {
// Handle presses on the action bar items
switch (item.getItemId()) {
case R.id.apply:
Intent in = new Intent(this, MainActivity.class);
startActivity(in);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
在这里我尝试使用 OnOptionsItemSelected 完成所有操作
package com.bernard.beaconportal;
import java.lang.reflect.Field;
import com.actionbarsherlock.app.SherlockFragment;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;
import com.astuetz.PagerSlidingTabStrip;
import com.bernard.beaconportal.FragmentsLinked.ViewPagerAdapterScheduleView;
import android.view.View.OnClickListener;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
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.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
public class FragmentsEdit extends FragmentActivity {
private ViewPager pager;
private ViewPagerAdapterSchedule adapter;
private PagerSlidingTabStrip tabs;
String uriString;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActionBar().setDisplayHomeAsUpEnabled(true);
setContentView(R.layout.viewpager_schedule);
pager = (ViewPager) findViewById(R.id.viewPager1);
adapter = new ViewPagerAdapterSchedule(getSupportFragmentManager());
tabs = (PagerSlidingTabStrip) findViewById(R.id.pagerTabStrip1);
pager.setAdapter(adapter);
tabs.setViewPager(pager);
Intent intents = getIntent();
String GFriday = intents.getStringExtra("G_Friday");
String BFriday = intents.getStringExtra("B_Friday");
String ADV1Friday = intents.getStringExtra("ADV1_Friday");
String ADV2Friday = intents.getStringExtra("ADV2_Friday");
String CFriday = intents.getStringExtra("C_Friday");
String FFriday = intents.getStringExtra("F_Friday");
}
public class ViewPagerAdapterSchedule extends FragmentPagerAdapter {
// Declare the number of ViewPager pages
final int PAGE_COUNT = 5;
private String titles[] = new String[] { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" };
public ViewPagerAdapterSchedule(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
// Open FragmentTab1.java
case 0:
Monday schedule_list_view = new Monday();
return schedule_list_view;
// Open FragmentTab2.java
case 1:
Tuesday schedule_list_view1 = new Tuesday();
return schedule_list_view1;
case 2:
Wednesday schedule_list_view2 = new Wednesday();
return schedule_list_view2;
case 3:
Thursday schedule_list_view3 = new Thursday();
return schedule_list_view3;
case 4:
Friday schedule_list_view4 = new Friday();
return schedule_list_view4;
}
return null;
}
public CharSequence getPageTitle(int position) {
return titles[position];
}
@Override
public int getCount() {
return PAGE_COUNT;
}
}
public boolean onCreateOptionsMenu(android.view.Menu menu) {
android.view.MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.android_apply, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(android.view.MenuItem item) {
// Handle presses on the action bar items
switch (item.getItemId()) {
case R.id.apply:
SharedPreferences sharedPref = getApplicationContext().getSharedPreferences("schedule",Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString("G_Friday", GFriday);
editor.putString("B_Friday", BFriday);
editor.putString("ADV1_Friday", ADV1Friday);
editor.putString("ADV2_Friday", ADV2Friday);
editor.putString("C_Friday", CFriday);
editor.putString("F_Friday", FFriday);
editor.commit();
Intent in = new Intent(this, MainActivity.class);
startActivity(in);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
【问题讨论】:
-
只是一个注释,你的变量应该以小写字母开头,所以它们不会与类名混淆。
-
不同,因为我使用了 OnOptionItemSelected,这意味着其中包含的内容无法看到 onCreate 中的字符串,即使它们是最终的。
标签: android string android-intent sharedpreferences oncreate