2014-12-30 5 views
0

할 일 목록 응용 프로그램을 만들려고합니다. 화면이 회전하면 동적으로 추가 된 모든 텍스트 뷰가 제거됩니다. 텍스트 뷰는 추가 버튼 바로 위에있는 선형 레이아웃 내에서 LinearLayout에 추가됩니다.Android - 동적으로 생성 된 TextViews 저장

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/linearLayout" 
    android:weightSum="1"> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:id="@+id/listItems"></LinearLayout> 

    <EditText 
     android:id="@+id/editText" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     /> 
    <Button 
     android:id="@+id/button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Add+" 
     /> 
</LinearLayout> 

MainActivity.Java

public class MainActivity extends Activity { 
    private LinearLayout mLayout; 
    private LinearLayout ListItems; 
    static final String counter_value = "int_value"; 
    static final String toDoList_value = "toDolist"; 
    private EditText mEditText; 
    private Button mButton; 
    private int counter; 

    private ArrayList<String> toDoList; 
    private ArrayList<String> keys; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     //This makes it so that the keyboard appears only after you tap the EditText. Stackoverflow question by fixEdd Android on-screen keyboard auto popping up 
     this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
     // end code 

     if (toDoList != null){ 
      System.out.println("Success!"); 
      for(int i = 0; i< toDoList.size(); i++){ 
       System.out.println(toDoList.get(i)); 
       ListItems.addView(createNewTextView(toDoList.get(i))); 
      } 
     } 
     else{ 
      System.out.println("Nope!"); 
      toDoList = new ArrayList<String>(); 

     } 

     counter = 1; 
     mLayout = (LinearLayout) findViewById(R.id.linearLayout); 
     ListItems = (LinearLayout) findViewById(R.id.listItems); 
     mEditText = (EditText) findViewById(R.id.editText); 
     mButton = (Button) findViewById(R.id.button); 
     mButton.setOnClickListener(onClick()); 
     TextView textView = new TextView(this); 
     textView.setText("New text"); 
    } 

    private View.OnClickListener onClick() { 
     return new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       ListItems.addView(createNewTextView(mEditText.getText().toString())); 
      } 
     }; 
    } 

    private TextView createNewTextView(String text) { 
     final RadioGroup.LayoutParams lparams = new RadioGroup.LayoutParams(RadioGroup.LayoutParams.WRAP_CONTENT, RadioGroup.LayoutParams.WRAP_CONTENT); 
     final TextView textView = new TextView(this); 
     textView.setLayoutParams(lparams); 
     textView.setFreezesText(true); 
     textView.setText(counter + ":" + text); 
     textView.setId(counter); 
     System.out.println(textView.getId()); 

     toDoList.add(text); 

     counter++; 
     return textView; 
    } 

    @Override 
    protected void onRestoreInstanceState(Bundle savedInstanceState){ 

     super.onRestoreInstanceState(savedInstanceState); 

     counter = savedInstanceState.getInt(counter_value); 
     toDoList = savedInstanceState.getStringArrayList("key"); 

     //REad values from the savedInstanceState" -object and put them in your textview 
    } 

    @Override 
    protected void onSaveInstanceState(Bundle outState){ 
     // Save the values you need from your textview into "outSTate" -object 
//  outState.putParcelableArrayList("key", toDoList); 

     outState.putInt(counter_value, counter); 
     outState.putStringArrayList("key", toDoList); 
     super.onSaveInstanceState(outState); 
    } 
} 

activity_main.xml 또한 I의 의견을 재 부가하여이 작업을 수행하는 가장 좋은 방법입니다 확실하지 않다. 그것은 운영 낭비 인 것 같습니다. 텍스트 뷰를 그대로 유지할 수있는 방법이 있습니까?

+0

대신 재활용보기를 사용하십시오. – meh

답변

1
@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState){ 

    super.onRestoreInstanceState(savedInstanceState); 

    counter = savedInstanceState.getInt(counter_value); 
    toDoList = savedInstanceState.getStringArrayList("key"); 

    // Add this for-loop to restoring your list 
    for(String str : toDoList){ 
     ListItems.addView(createNewTextView(str)); 
    } 
} 

그러나 제 의견으로는 이것은 좋은 접근 방법이 아닙니다. a를 사용하는 것이 더 좋습니다 ListView

0

ListView를 어댑터와 함께 사용하여 To Do 목록을 구현하면 더 좋습니다. 웹에는 많은 자습서가 있습니다. 예를 들어 this one에서 시작하십시오.

+0

링크를 제공해 주셔서 감사합니다. – Tai

관련 문제