2011-05-09 6 views
0

내 안드로이드 응용 프로그램에서 레이아웃에 새로운 동적 회 전자를 추가하는 단추가 있습니다. 모든 생성 된 Spinner는 동일한 Array를 사용합니다.동적 회 전자 및 sharedpreferences

지금까지 어떤 작업을하고 있었는지, 만든 스피너 수를 저장하고 응용 프로그램을 다시 시작한 후에 다시 만들 수 있습니다. 하지만 sharedPreferences에 각 Spinner의 selectedPosition을 저장하고 싶습니다. 여기는 ForceClose Desaster에 머물러 있습니다 ...

모든 Spinner는 만들 때 ID를 저장하므로 저장할 수 있습니다. 이 ID로 설정되어있는 Position.

그래서 이것은 내가 무슨 짓을 :

public void addSpinner(){ 

    LinearLayout AddLayout = (LinearLayout)findViewById(R.id.linearAddScroll); 
    spinner = new Spinner(this); 
    ArrayAdapter<?> adapt = ArrayAdapter.createFromResource(this, 
      R.array.Filter, android.R.layout.simple_spinner_item); 
    adapt.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner.setAdapter(adapt); 
    AddLayout.addView(spinner); 
    } 

이는 회 전자를 만듭니다.

public void onClick(View v) { 
      addSpinner(); 


      int ID = 1000+x; 
      spinner.setId(ID); 
      Toast.makeText(MatReporterActivity.this,"ID" + ID, 5) 
      .show(); 
      x++; 
     } 

ID를 설정하십시오.

x = settings.getInt("xsave", 1); 
    for(y = 1; y < x; y++){ 
     addSpinner(); 

     int ID = 1000+y; 
     Spinner s = (Spinner) findViewById(ID); 

     String ys= Integer.toString(ID); 
     Toast.makeText(MatReporterActivity.this,"ID" +ys, 5) 
     .show(); 
     int yf = settings.getInt(ys, 1); 
     s.setSelection(yf); 
     } 

그리고이 이동 중지() :

내가의 작성 방법에 할 것입니다

SharedPreferences settings = PreferenceManager 
      .getDefaultSharedPreferences(this); 
    SharedPreferences.Editor editor = settings.edit(); 
    editor.putInt("xsave", x); 
    for(y = 1; y < x; y++){ 
     int ID = 1000+y; 
     Spinner s2= (Spinner) findViewById(ID); 
     int possS = s2.getSelectedItemPosition(); 
     Toast.makeText(MatReporterActivity.this, "IDStop" + ID, 5) 
     .show(); 
     String ys= Integer.toString(ID); 
     editor.putInt(ys, possS); 
    } 

    editor.commit(); 
} 

나는에서 onCreate 방법의 논리적 문제가 있다고 생각하지만, 내가 ' 그것을 찾을 수 없습니다, 또한 웹에서 동적으로 생성 된 회 전자를 채우고 저장하는 방법을 찾지 못했습니다.

어쩌면 누군가가 아이디어를 가지고있을 것입니다. 덕분에 .

+0

강제로 스택 추적 닫기? LogCat을 사용하십니까? 그렇지 않으면해야합니다. – Klaus

답변

0

SharedPreferences는 이러한 종류의 데이터를 저장하는 좋은 방법이 아닙니다. 당신은 그 2 단계를 수행하려고합니다

저장하려는 데이터를 표현하기 위해 직렬화 구현하는 클래스를 만듭니다 (당신이 직렬화 개체의 목록을 사용할 수 있습니다)

public class SpinnerSave implements Serializable { 
    public String ID; 
    public int selection; 

    public SpinnerSave(String ID, int selection){ 
    this.ID = ID; 
    this.selection = selection; 
    } 
} 

그런 다음 당신은 당신의 데이터를 기록한다 이렇게 파일에

private void saveState() { 
final File cache_dir = this.getCacheDir(); 
final File suspend_f = new File(cache_dir.getAbsoluteFile() + File.separator + SUSPEND_FILE); 

FileOutputStream fos = null; 
ObjectOutputStream oos = null; 
boolean   keep = true; 

try { 
    fos = new FileOutputStream(suspend_f); 
    oos = new ObjectOutputStream(fos); 

    oos.writeObject(this.gameState); 
} 
catch (Exception e) { 
    keep = false; 
    Log.e("MyAppName", "failed to suspend", e); 
} 
finally { 
    try { 
     if (oos != null) oos.close(); 
     if (fos != null) fos.close(); 
     if (keep == false) suspend_f.delete(); 
    } 
    catch (Exception e) { /* do nothing */ } 
} 
} 
+0

좋아, 나는 내 대답을 더 많이 또는 더 적게 이해한다 (나는 피의 초보자이다.).하지만 이미 내 앱에 데이터베이스가 있기 때문에 거기에 저장하는 것을 선호한다. 문제는, 변화하는 수의 스피너에 올바른 위치를 부여하는 방법을 정말로 모른다는 것입니다. – paulina

+0

스피너 ID를 키로 사용하고 그 위치를 값으로 사용하여 해시 맵을 저장하려고 했습니까? – Kirualex

+0

전에는 들어 보지 못했지만 내가 보는 한 흥미로운 것 같습니다. 이 해시 맵은 응용 프로그램의 kill 프로세스에서 살아남을 지 또는 어떻게 든 저장해야합니까? – paulina