Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 访问其他活动';s文本视图,用于在不同活动中追加文本_Android - Fatal编程技术网

Android 访问其他活动';s文本视图,用于在不同活动中追加文本

Android 访问其他活动';s文本视图,用于在不同活动中追加文本,android,Android,首先,感谢您阅读并花时间解决此问题。 我有一些功能,每个功能都包含一个按钮,用于转到下一个。最后一个包含一个TextView,我想append()每个活动都已完成其工作的文本。我使用static访问TextView,但是因为包含TextView的活动是最后一个运行的活动,所以我得到了NullException。 我将感谢你的建议。 谢谢;) 最后一项活动: public class FinishActivity extends Activity { static TextView te

首先,感谢您阅读并花时间解决此问题。 我有一些功能,每个功能都包含一个按钮,用于转到下一个。最后一个包含一个TextView,我想
append()
每个活动都已完成其工作的文本。我使用static访问TextView,但是因为包含TextView的活动是最后一个运行的活动,所以我得到了NullException。 我将感谢你的建议。 谢谢;)

最后一项活动:

public class FinishActivity extends Activity {

    static TextView textViewResult;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.finish_layout);
        textViewResult = (TextView)findViewById(R.id.textViewResult);

    }
}

你可以把你的文本放在你用来开始你的活动的意图中

Intent i = new Intent(FirstScreen.this, SecondScreen.class);   
String strName = "abc";
i.putExtra("STRING_I_NEED", strName);
然后在下一个活动中,您可以通过

Bundle extras = getIntent().getExtras();
if(extras == null) {
    newString= null;
} else {
    newString= extras.getString("STRING_I_NEED");
}

可以使用intent.putExtra()方法,如

   Intent intent = new Intent(this, your_next_activity.class);
   intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
   intent.putExtra("src", textViewResult.getText().toString() );
   startActivity(intent);
然后在oncreate()方法的下一个活动中,使用下面的方法检索

    Intent i = getIntent();
    String s = i.getExtras().getString("src");

如图所示,使用SharedReferences在每个活动后保存附加的字符串,并在最后一个活动中使用它作为
textview.setText(pref.getString(“key”,null))

如果您不了解如何创建/使用SharedReferences,请留言,我很乐意提供帮助

更新: 在每项活动中都要申报-

SharedPreferences pref;
SharedPreferences.Editor editor;
然后在onCreate()中-

您可以使用任何字符串来代替上面的“name”。它是您的SharedReference文件的名称

现在保存字符串-

editor.putString("myString", "some string");
editor.apply();
获取字符串-

String s=pref.getString("MyString",null);

只需在第二个活动中获取字符串->使用“+”追加->使用editor.put再次保存。这应该可以做到:)google SharedReferences更多信息

在您的情况下,最简单的方法是:使用
应用程序

//create class App that extends android.app.Application
public class App extends Application {
     public String yourTextToShow = "";    

     @Override 
     public void onCreate() {
         super.onCreate();
    }
}
修改AndroidManifest.xml的
标记,使其具有android:name=“your.package.name.App”属性

从那时起,无论何时,只要您想从任何
活动更改/访问您的文本,只需调用:
((App)getApplication()).yourTextToShow=“textyouwant”。在您的情况下,您需要在活动的
onResume
中重置
TextView

Intent i = new Intent(FirstScreen.this, SecondScreen.class);   
String strName = "abc";
i.putExtra("STRING_I_NEED", strName);

注意:不要尝试使用静态
TextView
。这是最糟糕的做法。它会给应用程序造成内存泄漏。

嗨,谢谢您的解决方案,是的,我知道如何按意向发送额外内容,但我的意图用于运行下一个活动,而我要附加的文本是在最后运行的最后一个活动中。您指打开应用时,要附加的文本位于第一个活动中。在这种情况下,可以使用startActivityForResult。检查开发人员站点-使用应用程序是一个不错的选择:)我听说了这样的事情。你能简单描述一下它是如何工作的吗?:)嗯,我不知道,我认真地听着:)不过我有个问题。当我多次调用同一个活动(出于某些长话短说的原因)时,它只保存最后一个!如果您先保存“string1”,然后下次保存getString(“MyString”)+“string2”,依此类推。“+”操作符用于附加字符串。这解决了您的问题吗?我使用了
editor.putString(“myStr”,pref.getString(“myStr”,null)+“\n”+“some str”),似乎有一些问题,但它的工作!谢谢你,伙计。我希望你不要谢我。这是你应得的:)谢谢你的好意。