将数据从一个活动发送到另一个类(非活动)

时间:2014-09-16 09:18:31

标签: java android android-layout sharedpreferences

我想将数据从一个活动发送到另一个类,但第二个类不是活动。它扩展了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作为我的文字....
现在问题在于另一个类共享偏好不起作用,因为它不是一个活动。希望得到别人的帮助。

6 个答案:

答案 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 SharedPreferenceContext相关。所以,解决方案是:

  1. Context类中定义静态Activity类。

    public static Context mAppContext;

  2. 使用mAppContext方法初始化getApplicationContext

    public void onCreate(){     mAppContext = getApplicationContext(); }

  3. 使用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);