2017-10-31 5 views
0

sharedPreferencesに保存した後、ListViewに新しい値を設定する際に問題があります。絵で AlertDialogに新しい値を設定した後でListViewを更新しますか?

The two lines - ListView with Items

私は(私のために説明しやすい)私のスマートフォンの画面上で見ることができるものを見ることができます。今すぐItem "Korrektur-Faktor"を押すと、AlertDialogが開き、私は新しい値を設定できます。

The AlertDialog

私は今、保存を押すと、新しい値(80)はSharedPreferencesに保存されますが、私のListViewItemの2行目に値が自動的に更新されることはありません。ここで

いくつかのコード:

String secLineCorrect = correctvalue.toString(); 
    ValueSettings targetValue = new ValueSettings("Zielwert", "getTargetSharedPref"); //TODO 
    ValueSettings correctFactor = new ValueSettings("Korrektur-Faktor", secLineCorrect + " mg/dl pro 1IE"); 

    //Füllen der ListView 
    final ArrayList<ValueSettings> valuesSettingsList = new ArrayList<>(); 
    valuesSettingsList.add(targetValue); 
    valuesSettingsList.add(correctFactor); 

    final ValueSettingsListAdapter valuesSettingsAdapter = new ValueSettingsListAdapter(this, R.layout.settings_list_item_two_lines, valuesSettingsList); 
    lvValues.setAdapter(valuesSettingsAdapter); 

    //Klickbare Items 
    lvValues.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      switch(position){ 
        //First Item in List 
       case 0: 
        Toast.makeText(SettingsActivity.this, "You clicked on: " + valuesSettingsList.get(position).getFirstLine() + "mit Item Nummer" + position, Toast.LENGTH_SHORT).show(); 
        break; 

        //Second Item in List 
       case 1: 
        AlertDialog.Builder mBuilder = new AlertDialog.Builder(SettingsActivity.this); 
        View mView = getLayoutInflater().inflate(R.layout.dialog_correctfactor,null); 
        final EditText mCorrectFactor = (EditText) mView.findViewById(R.id.et_correct_factor_input); 
        Button mCancel = (Button) mView.findViewById(R.id.btn_cancel); 
        Button mSave = (Button) mView.findViewById(R.id.btn_save); 

        mBuilder.setView(mView); 
        final AlertDialog dialog = mBuilder.create(); 
        dialog.show(); 

        //Click on Cancel 
        mCancel.setOnClickListener(new View.OnClickListener(){ 
         @Override 
         public void onClick(View v){ 
          Toast.makeText(SettingsActivity.this, "Abgebrochen. Kein neuer Wert eingespeichert!", Toast.LENGTH_SHORT).show(); 
         } 
        }); 
        //Click on Save 
        mSave.setOnClickListener(new View.OnClickListener(){ 
         @Override 
         public void onClick(View v) { 
          if(mCorrectFactor.getText().length() > 0){ 
           correctvalue = Integer.parseInt(mCorrectFactor.getText().toString()); 
           editor.putInt(correctValueKEY, correctvalue); 
           editor.commit(); 
           Toast.makeText(getApplicationContext(), "1 IE entspricht " + correctvalue + " mg/dl.", Toast.LENGTH_SHORT).show(); 
          }else { 
           Toast.makeText(getApplicationContext(), "Wert ist auf " + correctvalue + " md/dl gesetzt. Keine Änderung vorgenommen.", Toast.LENGTH_LONG).show(); 
          } 
          dialog.cancel(); 
         } 
        }); 


        break; 

      } 
     } 
    }); 

あなたは、私がコードの先頭にテキストを設定見ることができるように。だから私が前に救った新しい価値が見えるようになるたびに、私はメインアクティビティに戻り、設定を開始する必要があります。しかし、今度は、私がsaveを押してAlertDialogを閉じた後、新しい値が表示されます。私はそんなに試しましたが、解決策を得ることはありません。 誰かが私を助けてくれるかもしれません:)

+0

https://developer.android.com/reference/android/content/SharedPreferences.OnSharedPreferenceChangeListener.html – EpicPandaForce

答えて

1

まず、woodiiの示唆したように、保存された値がvaluesSettingsListに反映されていることを確認してください。あなたは、新しい値を保存した後

あなたは、この行を追加することができます。

valuesSettingsAdapter.notifyDataSetChanged(); 
+0

私はそれを変えることはできません:)ああ、以前は木のコメントを見たことがありません...私は試してみます:) – ElmoAll

+0

更新されたコードを共有できますか? –

1

を、このような機能については、私はPreferenceFragmentまたはPreferenceActivityを提案することができます。 とにかくSharedPreferences.OnSharedPreferenceChangeListenerを使用して、onSharedPreferenceChangedメソッドをオーバーライドし、それに応じてリストのエントリを更新することができます。

現在、SharedPreferencesでは保存されている値のみを変更できますが、リストの表示値は変更しません。

+0

onSharedPreferenceChangedメソッドには何を書き込むのですか? – ElmoAll

+0

'valuesSettingsList'の値を更新し、その後' notifyDataSetChanged'を呼び出してビューを更新してください。 – woodii

関連する問題