我有一个主要的活动,它有两个片段,我试图传递一些数据,我想在下面的片段上的edittext上已经附加任何文本。
具有两个单独标签的活动:
以下工作正常:
片段#1:
String y = "TEST 1";
SharedPreferences prefs; // shared preferences
prefs = getActivity().getSharedPreferences("spa", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("someId", y);
editor.commit();
片段#2:
SharedPreferences prefs; // shared preferences
prefs = getActivity().getSharedPreferences("spa", Context.MODE_PRIVATE);
String someId=prefs.getString("someId","");
showLog.setText(someId + "\n HERE"); //this overwrites the text and is multiline
我想要做的是我希望showLog附加在已经存在的内容之上。
我的showLog如下:
<EditText
android:id="@+id/showLog"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Nothing to display"
android:inputType="textMultiLine"
android:lines="12"
android:paddingLeft="2dip"
android:singleLine="false"
android:textColor="#999999"
android:textSize="14dip"
android:textStyle="normal"
android:gravity="top" />
例如:
showLog
已经开始在文本框中进行“这是测试”
调用SharedPreference
后,showLog
应显示以下内容:
TEST 1
HERE
THIS IS A TEST
但那并没有发生。我尝试使用没有任何影响的.append()
。
答案 0 :(得分:1)
如果我明白你想要得到什么,那么你应该能够做到
String text = showLog.getText().toString();
showLog.setText(someId + "\n HERE" + text);
如果您已经有文字,那么您只需获得该文字,然后在打开SharedPreference
之后将其全部放入原始文本中。
在第一个Activity
String someText = someTextString;
Intent i = new Intent(FirstActivity.this, SecondActivity.class);
i.putExtra("key", someText); // add some extra to the Intent to pass to next Activity
startActivity(i);
在SecondActivity
Intent intent = getIntent();
String myText = intent.getStringExtra("key"); // use same key value used in first Activity
答案 1 :(得分:1)
我想我明白你现在要做什么,你可能想尝试:
int start = showLog.getSelectionStart();
int end = showLog.getSelectionEnd();
String toIns = someId + "\n HERE";
showLog.getText().replace(Math.min(start, end), Math.max(start, end), toIns, 0, toIns.length());
从技术上讲,它不会附加,而是用新文本替换字符串的结尾。
编辑:鉴于出现了新问题,以下是我对您项目的修改,如果还有任何问题,请告诉我。
我的编辑版本位于右侧,原件位于左侧
我正在对文字做的可能不完全是你想要的,所以如果不是,请务必告诉我。
编辑2:并删除存储的值:
final SharedPreferences.Editor editor = prefs.edit();
editor.clear();
editor.commit();
编辑3:在准确理解了您想要做什么之后,通过存储添加的最后一个行程,并在TextView中跟踪所需的文本,这是一种方法。< / p>
prefs = getActivity().getSharedPreferences("spa", Context.MODE_PRIVATE);
// Find the string we want
String someId = prefs.getString("someId","");
final Editor editor = prefs.edit();
// To stop a trip being added in onResume etc.
if(someId != prefs.getString("previous-trip", "")){
showLog.setText(someId + prefs.getString("previous", ""));
} else {
// Without this else, we'd have a blank box again
showLog.setText(prefs.getString("previous", ""));
}
// Store the latest trip that was added
editor.putString("previous-trip", someId);
// Store everything that's in the box so far for next time
editor.putString("previous", showLog.getText().toString());
// Commit to the prefs
editor.commit();
答案 2 :(得分:1)
关于您需要显示String
的部分:
// From what you have given, the TextView `showLog` is already displaying some text
// and you want to place another another String in front of it(prepend)
showLog.setText(stringToAdd + showLog.getText());
// "stringToAdd" is the string you trying to pass between activities(or fragments)