我有一个主要的活动,它有两个片段,我试图传递一些数据,这些数据我想附加在下一个片段的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首先在文本框中输入“ THIS IS A TEST”
调用SharedPreference时,showLog应显示以下内容:

TEST 1
 HERE
THIS IS A TEST


但这没有发生。我尝试使用没有任何影响的.append()

最佳答案

我想我知道您现在想做什么,您可能想尝试:

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());


从技术上讲,它不是在追加,而是以新文本替换字符串的结尾。

编辑:鉴于出现的新问题,以下是我对您的项目所做的编辑,请让我知道是否还有任何错误。

我的编辑版本在右侧,原始在左侧

CurrentTrip.java

DisplayTrip.java

我在用文本做的可能不完全是您想要的,所以请确保让我知道是否不是。

编辑2:并删除存储的值:

final SharedPreferences.Editor editor = prefs.edit();
editor.clear();
editor.commit();


编辑3:完全了解您要执行的操作后,这是一种方法,它可以存储最后添加的行程,并在TextView中跟踪所需的文本。

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();

08-28 17:14