используя настройки - мой список пуст (не может хранить данные) - PullRequest
1 голос
/ 09 февраля 2012

Мне нужна помощь для правильной настройки предпочтений.

У меня есть основное занятие, из которого, нажав кнопку меню, я перехожу к действию предпочтений. Там у меня есть 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, которая покажет список с серийными номерами:

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

}

Итак, моя проблемаявляется то, что список пуст. Это не данные.

Спасибо!

Ответы [ 4 ]

1 голос
/ 19 февраля 2012

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

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

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]);
}
1 голос
/ 12 февраля 2012

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

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

/ edit: Пример кода для сохранения / чтения массива

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

/ edit: также используйте 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>
1 голос
/ 17 февраля 2012

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

Если это так, то вам просто нужно переопределить onListItemClick, извлечь строку из значений [position], сохранить ее обратно в свои настройки и завершить () действие списка. Убедитесь, что String [] превращен в поле вместо локальной переменной, чтобы вы могли заполнить его в 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();
}
1 голос
/ 09 февраля 2012

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

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

username = mypref.getString("username", "");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...