我知道这个问题已有很多答案,但我仍然无法处理这个概念。
找到答案here显示:
如果您不想使用全局变量,您可以随时在活动中创建一个方法来返回字符串。
public String getMyString(){
return item; }
然后在您当前的活动中,您可以致电:
String myValue = LoginScreen.getMyString();
当我尝试这种方法时,我返回一个错误说"非静态方法不能从静态上下文引用"。但是,如果我将方法设为静态,则表示我的变量需要是静态的,但我需要更新变量。我将在下面提供我的代码。
第一项活动 -
btnSEARCH.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
if (editTextSearch.getText().toString() != null) {
SearchQueryTerm = editTextSearch.getText().toString();
editTextSearch.setText("");
}
}
});
public String getMyString(){
return SearchQueryTerm;
}
第二项活动 -
String SearchQueryTerm = MainActivity.getMyString();
我非常感谢你能给我的任何帮助。非常感谢!! < 3
这是我更新的代码 - 但它仍然崩溃:(
活动1
public void sendMessageIntent(View view) {
Intent search_intent = new Intent(this, SearchActivity.class);
api_intent.putExtra("my_variable", SearchQueryTerm);
startActivity(search_intent);
}
xml文件
<Button
android:id="@+id/button_view"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:text="View"
android:onClick="sendMessageIntent"
/>
活动2 -
public String SearchQueryTerm
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_enter_variable);
if (extras != null) {
SearchQueryTerm = extras.getString("my_variable");
}
}
答案 0 :(得分:3)
使用对象Intent的putExtra方法。
在您的第一个活动中创建例如:
std::vector<int> myArray;
void initArray() {
int arraySize;
std::cout << "Enter array size: ";
std::cout.flush();
if(std::cin >> arraySize) {
myArray.resize(arraySize);
}
}
在您的第二个活动中,您可以检索您的变量:
String value = "value";
Intent i = new Intent(getApplicationContext(), MyActivity.class);
i.putExtra("my_variable",value);
startActivity(i);
这是在活动之间传递变量的最佳方法。
为了告诉你它是如何工作的,我已经完成了这段代码:
第一项活动的XML:
Bundle extras = getIntent().getExtras();
if (extras != null) {
String value = extras.getString("my_variable");
}
第一项活动:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<EditText
android:id="@+id/editTextSearch"
android:layout_width="200dp"
android:layout_height="wrap_content" />
<Button
android:id="@+id/buttonSearch"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:text="Button"/>
</LinearLayout>
</RelativeLayout>
在第一个活动中,我们使用key =&#34; SearchQueryTerm&#34;传递putExtra方法中editText的值。
要检索editText的值,请在第二个Activity中执行此操作:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnSEARCH = (Button) findViewById(R.id.buttonSearch);
btnSEARCH.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
EditText editTextSearch = (EditText) findViewById(R.id.editTextSearch);
if (editTextSearch.getText().toString() != null) {
String value = "value";
Intent i = new Intent(getApplicationContext(), Main2Activity.class);
i.putExtra("SearchQueryTerm",editTextSearch.getText().toString());
startActivity(i);
editTextSearch.setText("");
}
}
});
}
}
现在您在变量SearchQueryTerm(第二个活动)中拥有editText的值。
它对我有用,所以没有理由不适合你。
希望它有所帮助。
答案 1 :(得分:2)
一个好的解决方案是添加一个“模型”单例类,您可以在其中存储必须在您的活动之间共享的数据
示例:
public class Model {
private static Model __instance == null;
private Model() {
}
public static Model instance() {
if (__instance == null) {
__instance = new Model();
}
return __instance;
}
private Object mydataToShare = null;
public void setMyDataToShare(Object mydataToShare) {
this.mydataToShare = mydataToShare;
}
public Object getMyDataToShare() {
return mydataToShare;
}
}
存储数据:
Model.instance().setMyDataToShare(<value to store>);
检索数据:
Object valueToRetrieve = Model.instance().getMyDataToShare();
它允许您传输复杂数据并将完全逻辑部分与UI分开