2017-04-21 7 views
-1

Ich versuche, die Daten von 4 Variablen auf den SharedPreferences zu speichern und es in eine Liste zu laden. Mein Problem ist, dass es alle Daten in der ersten Zeile der Liste anzeigt. Ich wollte teilen wie: Jedes Mal, wenn ich auf den Speichern-Knopf klicke, wollte ich die 4 Variablen speichern und wenn ich erneut darauf klicke, möchte ich die neuen Variablen speichern und eine neue Zeile anzeigen.Android - Split-String von Linien

Zeige alle auf dem gleichen Index: enter image description here

TubeDataFragment (Speichern):

public class TubeDataFragment extends Fragment { 

List<String> tubeData = new ArrayList<>(); 


public TubeDataFragment() { 
    // Required empty public constructor 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view = inflater.inflate(R.layout.fragment_tube_data, container, false); 

    final Spinner spinnerMaterial = (Spinner) view.findViewById(R.id.snipperMaterial); 
    ArrayAdapter<String> myAdapter = new ArrayAdapter<String>(getActivity(), R.layout.spinner_item, getResources().getStringArray(R.array.material)); 
    myAdapter.setDropDownViewResource(R.layout.spinner_dropdown_item); 
    spinnerMaterial.setAdapter(myAdapter); 
    //controls 
    Button btn_saveTube = (Button) view.findViewById(R.id.btn_save_tube); 
    final EditText et_diameter = (EditText) view.findViewById(R.id.et_diameter); 
    final EditText et_clr = (EditText) view.findViewById(R.id.et_clr); 
    final EditText et_thickness = (EditText) view.findViewById(R.id.et_thickness); 

    //guarda dados do tubo 
    btn_saveTube.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      tubeData.add(" Diameter: " + et_diameter.getText().toString()); 
      tubeData.add(" Thickness: " + et_thickness.getText().toString()); 
      tubeData.add(" CLR: " + et_clr.getText().toString()); 
      tubeData.add(" Material: " + spinnerMaterial.getSelectedItem().toString()); 

      StringBuilder stringBuilder = new StringBuilder(); 
      int i = 1; 
      for(String data : tubeData) 
      { 
       stringBuilder.append(data); 
       stringBuilder.append(";"); 

       if(i++ == tubeData.size()) 
       { 
        stringBuilder.append("\n"); 
       } 

      } 
      SharedPreferences settings = getActivity().getSharedPreferences("PREFS",0); 
      SharedPreferences.Editor editor = settings.edit(); 
      editor.putString("tubeData", stringBuilder.toString()); 
      editor.commit(); 
     } 
    }); 

    return view; 
} 

}

ArchiveFragment (Last)

public class ArchiveFragment extends Fragment { 


public ArchiveFragment() { 
    // Required empty public constructor 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view = inflater.inflate(R.layout.fragment_archive, container, false); 

    ListView tubeDataList = (ListView) view.findViewById(R.id.tubeData_list); 

    //load tube data 
    SharedPreferences settings = getActivity().getSharedPreferences("PREFS",0); 
    String tubeDataString = settings.getString("tubeData", ""); 
    String[] tubeDataSplit = tubeDataString.split("\n"); 

    List<String> tubeDataItems = new ArrayList<>(); 

    for(int i=0; i<tubeDataSplit.length;i++) 
    { 
     tubeDataItems.add(tubeDataSplit[i]); 
    } 

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), 
      android.R.layout.simple_list_item_1, android.R.id.text1, tubeDataItems); 


    // Assign adapter to ListView 
    tubeDataList.setAdapter(adapter); 

    return view; 
} 

}

+0

Wenn Sie eine Liste möchten, speichern Sie dann eine JSONArray als String –

+0

, was ist der Unterschied? Dies sollte mit einer Liste funktionieren ... – adiajdiadj

+0

Der Unterschied ist besser als die Verwendung eines String-Builders, den Sie anhängen und später splitten von –

Antwort

0

Ihre wenn Zustand ist falsch.

In TubeDataFragment unter Codes in onClick() Methode verwenden:

............. 
    .................. 
    StringBuilder stringBuilder = new StringBuilder(); 
    int i = 1; 
    for(String data : tubeData) 
    { 
     stringBuilder.append(data); 
     stringBuilder.append(";"); 

     if(i == 4) 
     { 
      stringBuilder.append("\n"); 
      i = 0; 
     } 
     i++; 
    } 

    ............... 
    ....................... 
Verwandte Themen