0

我有一个主要活动,它有两个片段,我正在尝试传递一些我想附加到上面的数据,无论文本已经在下一个片段的编辑文本上。

带有两个单独选项卡的活动:

在此处输入图像描述

以下工作正常

片段#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()没有任何影响。

4

3 回答 3

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

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

编辑:鉴于出现的新问题,这是我对您项目的编辑,如果还有什么问题,请告诉我。

右边是我编辑的版本,左边是原版

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();
于 2013-07-29T20:54:00.200 回答
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)
于 2013-07-29T21:08:41.327 回答
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
于 2013-07-29T20:26:20.740 回答