2012-02-09 1 views
1

環境設定を正しく設定するには、助けが必要です。環境設定を使用する - 私のリストビューは空です(データを保存することはできません)

私は、メニューボタンを押すことによって、私は設定アクティビティに行きます。私は、ユーザーが自分のデータを入力する場所が3つあります。最初のエントリはシリアル番号です。

すべてのシリアル番号のリストを表示できるようにしたいと思います。ユーザが1つを選択すると、他のエントリを表示します(または何らかの計算を行います)。

---------- UPDATED ----------------------------------- -

私の主な活動は次のとおりです。シリアル番号のリストビューが表示されます

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

} 

が、私の問題は、リストビューが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を解析することができます(たとえば、格納されたInteger値を解析するか、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(); 
} 

を読み込む/保存するためのいくつかのサンプルコード:代わりListActivityPreferenceActivityを使用しています。それは物事を楽にします。

次にOnCreate()にこのコードを追加します。すぐ下のコードを調整し、

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

をし、その後の活動に動的に優先ビューを追加します。PreferenceScreen XMLの

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

内容:

<?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)私はthis.theユーザーに入力を入力しています。私はその入力を使用することができますか?(例えば、彼は "serial_number"を入力します。私のアプリケーションでこの値を使用しますか?上記のコード(最後のもの)で(3)、私は 'String values'にすべての値を入れたいと思う(serial_number )最後に同じコードで "protected void onListItemClick .."内のコメントをチェックします.Thank – George

+0

SharedPreferencesから/に値を読み書きするには、新しいSharedPreferencesを作成しますオブジェクト、ここではチュートリアルです:http://android-er.blogspot.com/2011/01/example-of-using-sharedpreferencesedito.html これは2)と3)答えてください:) – Force

+0

また、開発者を見てページ:http://developer.android.com/reference/android/content/SharedPreferences.html – Force

1

だから、あなたはseを渡すことができるようですあなたのリストの活動までのrial numberは、リストに表示されます。そして今、あなたはアダプターをどうすればいいのか疑問に思っていますか?

もしそうなら、あなたはonListItemClickをオーバーライドし、値[位置]から文字列を引っ張り、それをあなたの好みに戻して保存し、リストの活動を終わらせる必要があります。その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(); 
} 
+0

:こんにちは、ありがとうございました。リストの活動はempyです。これは私の問題です。あなたが言ったようにgoto_listアクティビティを更新しましたが、それでも同じです。 – George

+0

:また、最初に "String [] [listItems = new String [100];"というように、私はString [] listItemsを正しく使用しているかどうかはわかりません。次に(onCreateで) "String [] listItems = new String [counter];" – George

+0

他のクラスメンバー変数を設定する、クラスの先頭に 'String [] listItems = null;'を最上位変数(フィールドと呼ばれます)として使いたいとします。次に、ここで 'String [] 'という接頭辞がないonCreate - noteに' listItem = ... 'を付けるか、実際には同じ名前の別のローカル文字列配列を作成します。 – 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

:私はそのことを意味しませんでした。ユーザーが入力したシリアル番号を表示したいです。私のserial_numberはpreferences.xmlのキーです。 – George

関連する問題