【问题标题】:How to pass data from activity to a class?如何将数据从活动传递到类?
【发布时间】:2017-11-13 00:33:05
【问题描述】:

如何将数据从活动发送到课程?

我尝试使用 getter 传递一个字符串,但这给了我变量的初始值,但我的字符串值在我的 onCreate 中发生了变化。有什么想法我怎么能把它传给我的班级?

这里是一些代码:

public class MainActivity extends AppCompatActivity {
 private String global ; 
    public String getGlobal() {
    return global;
}
 ...
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); 
    ...
   listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            global = String.valueOf(parent.getItemAtPosition(position));

        }
    });
}

这是我的课

public class SimpleVar {
MainActivity mainActivity = new MainActivity() ;
String data = mainActivity.getGlobal; }

任何帮助将不胜感激。提前谢谢你!

【问题讨论】:

  • 在android OS中运行的Activity实例和SimpleVar类中的对象是不同的。不确定您到底要做什么。但这是非常错误的,并且偏离了 android 开发的轨道
  • you need to pass the context 并在SimpleVar 中使用context 访问getGlobal()
  • 请告诉minimal reproducible example,假设这可行,您将如何使用SimpleVar.data

标签: java android class oop android-activity


【解决方案1】:

你不应该在你的班级中创建新的 mainactivity。 在实例化类时,向它传递对创建类的 Activity 的引用。对 Activity 的引用应该保存在弱引用中。然后你可以在 Activity 中创建一个 getter 并从你的类中调用它。

或者你可以做相反的事情——保持对 Activity 中实例化对象的引用。使用活动中的 setter 将新值传递给对象。

【讨论】:

  • 保留对活动的引用通常是内存泄漏
  • 谢谢,应该使用弱引用
【解决方案2】:

global 实际上并不是“全局”

Activity 的每个实例都有自己的字符串,操作系统可以随时决定终止您的 Activity 并重新创建它,因此不要依赖另一个类中的 Activity 变量。

其次,永远不要进行new 活动。这不再与您最终单击按钮的活动相关联。

很难确定你真正需要什么,但这是更正确的。

public class SimpleVar {
    String data; 
}

随着 Activity 向其发送数据

private SimpleVar var;
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); 
    ...
    var = new SimpleVar();
   listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            var.data = String.valueOf(parent.getItemAtPosition(position));

       }
    });
}

如果你在其他地方需要那个对象,你需要把它从这个 Activity 传递给那些类

【讨论】:

    【解决方案3】:

    尝试为你的类创建构造函数

    public class  SimpleVar {
    private String data;
    
    public SimpleVar(String data) {
        this.data = data;
    }
    
    public void setData(String data) {
        this.data = data;
    }
    

    }

    然后在您的活动中新建类,然后为其设置数据

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-14
      • 1970-01-01
      • 2021-07-23
      • 2016-07-28
      • 1970-01-01
      • 1970-01-01
      • 2021-04-23
      相关资源
      最近更新 更多