我想将数据从一个活动发送到另一个类,但第二个类不是活动。它扩展了Framelayout。
if (imageHolder1 != null) {
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT,
Gravity.CENTER);
ImageCell newView = new ImageCell(this);
resourceId = R.drawable.tile;
newView.setBackgroundResource(resourceId);
// newView.setImageResource(resourceId);
imageHolder1.addView(newView, lp);
TextView tv =newView.getTextView();
tv.setText("A");
SharedPreferences pref = getSharedPreferences("A", MODE_WORLD_WRITEABLE);
Editor edt = pref.edit();
edt.putString("A", tv.toString());
edt.commit();
newView.getPointTxtView().setText("5");
newView.mEmpty = false;
newView.mCellNumber = -1;
mLastNewCell = newView;
mImageCount++;
newView.setOnClickListener(this);
newView.setOnLongClickListener(this);
newView.setOnTouchListener(this);
}
if (imageHolder2 != null) {
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT,
Gravity.CENTER);
ImageCell newView = new ImageCell(this);
resourceId = R.drawable.tile;
// newView.setImageResource(resourceId);
newView.setBackgroundResource(resourceId);
imageHolder2.addView(newView, lp);
// newView.getTextView().setText("B");
TextView tv =newView.getTextView();
tv.setText("B");
SharedPreferences pref = getSharedPreferences("A", MODE_PRIVATE);
Editor edt = pref.edit();
edt.putString("A", (String) tv.getText());
edt.commit();
newView.getPointTxtView().setText("2");
newView.mEmpty = false;
newView.mCellNumber = -1;
mLastNewCell = newView;
mImageCount++;
newView.setOnClickListener(this);
newView.setOnLongClickListener(this);
newView.setOnTouchListener(this);
}
这是我的另一个班级
pref = getContext().getSharedPreferences("A", Context.MODE_PRIVATE);
textView.setText(pref.getString("A", null));
Log.e("ad", "awd" + pref.getString("A", null));
Log.i("Position:", "" + mCellNumber);
int column = mCellNumber % total_col;
int row = mCellNumber / total_col;
Log.i("Column:", "" + column);
Log.i("Row:", "" + row);
但我得到android.widget.textview作为我的文字....
现在问题在于另一个类共享偏好不起作用,因为它不是一个活动。希望得到别人的帮助。
答案 0 :(得分:1)
尝试,
SharedPreferences pref = getContext().getSharedPreferences("A", Context.MODE_WORLD_WRITEABLE);
而不是使用
Editor edt = pref.edit();
edt.putString("A", tv.toString());
edt.commit();
使用
Editor edt = pref.edit();
edt.putString("A", tv.getText().toString());
edt.commit();
答案 1 :(得分:1)
任何Layout类中的SharedPreferences对象
this.getContext().getSharedPreferences("A", MODE_WORLD_WRITEABLE);
请确保Context应该相同,您在SharedPreferences中用于保存任何对象的那个...希望这会有所帮助。
答案 2 :(得分:1)
你可以像这样的缩窄器传递值
public class YourClass extends FrameLayout {
private String value;
public YourClass(Context context, String value) {
super(context);
this.value = value;
}
public YourClass(Context context, AttributeSet attrs, String value) {
super(context, attrs);
this.value = value;
}
public YourClass(Context context, AttributeSet attrs, int defStyle, String value) {
super(context, attrs, defStyle);
this.value = value;
}
}
或者您可以创建类扩展应用程序并在其上定义SharedPreferences,就像这样
public class YourClass extends Application {
private static SharedPreferences sharedPreferences;
public static SharedPreferences getSharedPreferences() {
return sharedPreferences;
}
@Override
public void onCreate() {
super.onCreate();
YourClass.sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext());
}
}
然后,您可以像这样调用SharedPreferences
SharedPreferences sharedPreferences = YourClass.getSharedPreferences();
sharedPreferences.getString("","");
YourClass.getSharedPreferences().getString("","");
并确保在AndroidManifest.xml中设置应用程序名称,如下所示
<application
android:name=".YourClass" .... />
你可以在项目的任何地方调用SharedPreferences
答案 3 :(得分:1)
您可以在非活动课程中使用SharedPreference
SharedPreference
与Context
相关。所以,解决方案是:
在Context
类中定义静态Activity
类。
public static Context mAppContext;
使用mAppContext
方法初始化getApplicationContext
。
public void onCreate(){ mAppContext = getApplicationContext(); }
使用SharedPreferences
获取YourActivity.mAppContext
。
SharedPreferences prefs = YourActivity.mAppContext.getSharedPreferences(&#34; A&#34;,MODE_WORLD_WRITEABLE);
答案 4 :(得分:0)
在创建该对象的类setvalue的实例时,在其他类中创建一个静态对象
例如:
XYZ xyz=new XYZ(context);
xyz.somestaticvariable=somevalue;
你也在犯一个你正在使用的简单错误
tv.toString();
改为使用
tv.getText();
答案 5 :(得分:0)
你不关心你的课程是否活动。因为getSharedPreference()是Context类的方法。
更改
SharedPreferences pref = getSharedPreferences("A", MODE_WORLD_WRITEABLE);
到
SharedPreferences pref = getContext().getSharedPreferences("A", MODE_WORLD_WRITEABLE);