2013-07-29 2 views
0

У меня есть основное действие, которое имеет два фрагмента, и я пытаюсь передать некоторые данные, которые я хочу добавить выше, чем те тексты уже на edittext на следующем фрагмент.Использование SharedPreferences только setText() работает, но append() не

активность с двумя отдельными вкладками:

enter image description here

Следующая работает отлично:

Фрагмент # 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(), который не повлиял.

ответ

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

Технически это не добавление, а замена конца строки новым текстом.

EDIT: В свете возникшей новой проблемы, вот мои изменения в вашем проекте, сообщите мне, если что-то еще не так.

Моя отредактированная версия справа, оригинал на левой

CurrentTrip.java

DisplayTrip.java

Что я делаю с текстом не может быть именно то, что вы хотите, так что обязательно дайте мне знать, если это не так.

EDIT 2: И удалить сохраненные значения:

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

EDIT 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(); 
+0

Спасибо, но он еще не работает:/ – Si8

+0

@ SiKni8 У вас есть проект где-нибудь? – whitfin

+0

Я могу закрепить его и поместить его ob GitHub – Si8

1

Если я понимаю, что вы пытаетесь получить, то вы должны быть в состоянии сделать

String text = showLog.getText().toString(); 
showLog.setText(someId + "\n HERE" + text); 

Если у вас уже есть текст в нем, то вы просто получите этот текст и после открытия вашего SharedPreference положить все это в с исходным текстом.

Intent extras

В первом 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 
+0

Хммм ... не думаю, что это именно так. Позвольте мне попробовать. Благодарю. (Обновление: теперь он просто устанавливает текст, а не добавляет его). – Si8

+0

Он установит текст, но он поместит ваши новые переменные сначала, а затем ваш исходный текст, который был в 'showLog'. Наверное, я точно не знаю, что тебе нужно. Можете ли вы уточнить, что происходит сейчас и что вы хотите? – codeMagic

+0

Фрагмент # 1 имеет кнопку, которая после щелчка берет значение edittext и отправляет его в Фрагмент # 2 для добавления в showLog. После того, как я сделал редактирование согласно вашему предложению (которое работает btw с незначительной проблемой), все это перезаписывает новую информацию, которая сохраняется в 'someId', а не добавляет ее. – Si8

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)