2012-02-09 2 views
1

Мне нужна помощь, чтобы правильно настроить настройки.с использованием настроек - мой список пуст (не может хранить данные)

У меня есть моя основная деятельность, с которой нажатием кнопки меню я перехожу к активности предпочтений. Там у меня есть 3 записи, в которые пользователь вводит свои данные. Первая запись - это серийный номер.

Я хочу, чтобы показать список со всеми серийными номерами, и когда пользователь его выбирает, покажите ему другие записи (или сделайте некоторые вычисления).

---------- ОБНОВЛЕНО ----------------------------------- -

Моя основная деятельность:

public class Strength extends Activity implements OnClickListener{ 


View goto_list; 
SharedPreferences mypref; 
String [] values=new String [100]; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    //Set up click listeners 
    goto_list=(View) findViewById(R.id.goto_list); 
    goto_list.setOnClickListener(this); 

    //Setup preferences 
    mypref= PreferenceManager.getDefaultSharedPreferences(this); 
    SharedPreferences.Editor prefsEditr=mypref.edit(); 

    final Integer counter =values.length; 
    prefsEditr.putInt("size", counter); 
    for (int i=0;i<counter;i++) { 
     prefsEditr.putString("serial_number"+i, values[i]); 
    } 

    prefsEditr.putString("date", ""); 
    prefsEditr.putString("strength", "1.0"); 
    prefsEditr.commit();  

} 

Моя goto_list деятельность, которая будет показывать ListView с серийными номерами:

public class goto_list extends ListActivity { 
private final String TAG="list"; 
SharedPreferences mypref; 
    String[] listItems = null; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.list); 


    mypref= PreferenceManager.getDefaultSharedPreferences(this); 

    final Integer counter = mypref.getInt("size",0); 
    listItems=new String[counter]; 
    for (int i=0;i<counter;i++) { 
     listItems[i] = mypref.getString("serial_number"+i, ""); 
    } 

    //what to do with ArrayAdapter? 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1,listItems);    
    setListAdapter(adapter); 
} 
     protected void onListItemClick(ListView l, View v, int position, long id) { 
    Log.i(TAG, "position: " + position); 
     Log.i(TAG, "item: " + listItems[position]); 
     mypref.edit().putString("serial_number", listItems[position]).commit(); 

    String item = (String) getListAdapter().getItem(position); 
    Intent i=new Intent(this,calcs_strength.class); 
    startActivity(i); 
    finish(); 

} 

Итак, моя проблема заключается в том, что ListView является empty.It шоу нет данных.

Спасибо!

ответ

1

Попробуйте это ....

SharedPreferences mypref= PreferenceManager.getDefaultSharedPreferences(this); 
SharedPreferences.Editor prefsEditr=mypref.edit(); 
prefsEditr.putString("username", username); 
prefsEditr.commit(); 

username = mypref.getString("username", ""); 
1

1): В prefsEditr.putFloat("strength", -1); значение "-1" представляет собой целое число, и, следовательно, хранится в виде целого числа. Вы можете использовать Float.parseFloat для синтаксического анализа целого числа (например, синтаксический анализ сохраненного значения Integer или разбор целочисленного значения и сохранение его).

Не могли бы вы уточнить 2) и 3)? Я не получил то, что точно вы имели в виду.

/редактирования: Некоторые примеры кода для сохранения/чтения Массив

public String[] readArray() { 
    SharedPreferences openPreferences = context.getSharedPreferences("arrayfile", Context.MODE_PRIVATE); 
    final Integer counter = openPreferences.getInt("size", 0); 
    String[] result = new String[counter]; 
    for (int i=0;i<counter;i++) { 
     result[i] = openPreferences.getString("entry_"+i, ""); 
    } 
    return result; 
} 

public void writeArray(String[] array) { 
    Editor editor = context.getSharedPreferences("arrayfile", Context.MODE_PRIVATE).edit(); 
    final Integer counter =array.length; 
    editor.putInt("size", counter); 
    for (int i=0;i<counter;i++) { 
     editor.putString("entry_"+i, array[i]); 
    } 
    editor.commit(); 
} 

/редактирования: Также используйте PreferenceActivity вместо ListActivity. Это облегчает ситуацию.

Затем добавьте этот код в OnCreate():

PreferenceManager localPreferenceManager = getPreferenceManager(); 
    localPreferenceManager.setSharedPreferencesName("main_prefs"); 
    localPreferenceManager.setSharedPreferencesMode(MODE_PRIVATE); 
      [for every entry do:] { 
       addNewPref("ArrayValue"); 
      } 

, а затем добавить динамически Привилегированный вид на операцию, просто настроить код ниже:

private void addNewPref(String title) { 
    Preference newPref = new Preference(this); 
    newPref.setTitle(title); 
    ((PreferenceScreen) getPreferenceManager().findPreference("category_key")).addItemFromInflater(newPref); 
} 

Содержание PreferenceScreen XML:

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen android:key="category_key" xmlns:android="http://schemas.android.com/apk/res/android" > 
</PreferenceScreen> 
+0

: Здравствуйте, 1) я сделал "putFloat (" сила "-1.0f)", но по-прежнему same..As для (2) Я прошу этого. Пользователь вводит некоторый вход. Как я могу использовать этот вход? (Например, он вводит «serial_number». Как я буду использовать это значение в своем приложении? Вот почему я пытаюсь сделать «String serial_number = mypref.getString ("serial_number", ""); "но я не уверен. Что касается (3) в коде выше (последний), я хочу поместить в значения" String "все значения (serial_number) из пользовательского ввода, чтобы показать их в списке. Наконец, отметьте комментарии внутри «protected void onListItemClick ..» в том же коде (последний). Спасибо – George

+0

Чтобы прочитать/записать значения из/в SharedPreferences, создайте новую SharedPreferences объект, вот урок: http://android-er.blogspot.com/2011/01/example-of-using-sharedpreferencesedito.html Это должно ответить 2) и 3) :) – Force

+0

Также посмотрите на разработчиков page: http://developer.android.com/reference/android/content/SharedPreferences.html – Force

1

Таким образом, кажется, что вы можете пройти мимо rial номера к вашей активности в списке, и они отображаются в списке, не так ли? И теперь вам интересно, что делать с адаптером?

Если это так, то вам просто нужно переопределить onListItemClick, вывести строку из значений [position], вернуть ее в свои настройки и завершить() активность списка. Убедитесь, что вы изменили эту строку в поле вместо локального var, чтобы вы могли заполнить его в onCreate и использовать его onListItemClick.

String[] listItems = null;//fill in in onCreate 
SharedPreferences prefs = null;//grab in onCreate 

@Override 
public void onListItemClick(ListView l, View v, int position, long id) 
{ 
    Log.i(TAG, "position: " + position); 
    Log.i(TAG, "item: " + listItems[position]); 
    prefs.edit().putString("mySerial", listItems[position]).commit(); 
} 
+0

: Привет и спасибо за помощь. Активность списка - empy. Это моя проблема. Я обновил активность goto_list, как вы сказали, но все тот же. – George

+0

: Кроме того, я не уверен, что я использую String [] listItems правильно, потому что в начале я делаю «String [] listItems = new String [100];» и затем (in onCreate) "String [] listItems = new String [counter];" для заполнения – George

+0

Вы хотите 'String [] listItems = null;' как переменную верхнего уровня (называемую полем) в начале вашего класса, где вы устанавливаете другие переменные-члены класса. Затем вы хотите, чтобы 'listItem = ...' в вашей onCreate-note без префикса 'String [] 'здесь, или на самом деле создаст другой локальный массив строк с тем же именем. – Josh

1

Ваш массив пуст.

изменить это:

for (int i=0;i<counter;i++) { 
    prefsEditr.putString("serial_number"+i, values[i]); 
} 

с:

for (int i=0;i<counter;i++) { 
    // just replace the string with you serial number; 
    values[i] = "998-123-234-122_" + i; 
    prefsEditr.putString("serial_number"+i, values[i]); 
} 
+0

: Здравствуйте, с этим он просто показывает мне список с цифрами 0-99.Я хочу показать мне серийный номер каждой записи в списке. – George

+0

Я обновил пример. –

+0

: Я не имел в виду это. Я хочу показать серийный номер, который пользователь ввел. Мой серийный номер - это ключ из preferences.xml. – George

Смежные вопросы