2013-10-29 3 views
-1

두 조각이 있습니다 (하나는 편집 텍스트와 버튼 하나, 다른 하나는 목록보기 만 있음). 조각 트랜잭션을 사용하여 동적으로 만듭니다. 하지만 그렇게하려고 할 때 내 앱이 시작되지 않습니다. 내 코드에서 내가 뭘 잘못 했니?조각을 동적으로 만드는 방법은 무엇입니까?

AddToDoFragment.java

public class AddToDoFragment extends Fragment { 

public interface OnToDoAddedListener { 

    public void OnToDoAdded (String newToDo); 

} 

private OnToDoAddedListener onToDoAddedListener; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.add_to_do_fragment, container, false); 

    final EditText edittext = (EditText) view.findViewById(R.id.editText); 
    Button button = (Button) view.findViewById(R.id.addButton); 
    button.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 

      String text = edittext.getText().toString(); 
      onToDoAddedListener.OnToDoAdded(text); 
      edittext.setText(""); 
     } 
    }); 

    return view; 

} 

@Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
     if (activity instanceof OnToDoAddedListener) { 
     onToDoAddedListener = (OnToDoAddedListener) activity; 
     } else { 
     throw new ClassCastException(activity.toString() 
      + " must implemenet AddToDoFragment.OnToDoAddedListener"); 
     } 
    } 

}

MainActivity.java

public class MainActivity extends Activity implements AddToDoFragment.OnToDoAddedListener { 



private ArrayList<String> todoItems; 
private ArrayAdapter<String> adapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    if(savedInstanceState == null) { 
     todoItems = new ArrayList<String>(); 
    } else { 
     todoItems = savedInstanceState.getStringArrayList("todoItemTag");//the tag must match what the variable was saved with in onSaveInstanceState 
    } 

    FragmentManager fm = getFragmentManager(); 

    ToDoListFragment listToDo = new ToDoListFragment(); 
    listToDo = (ToDoListFragment) fm.findFragmentById(R.id.list_view_fragment); 

    if(listToDo == null) 
    { 
     FragmentTransaction ft = fm.beginTransaction(); 
     ft.add(R.id.add_to_do_fragment, new AddToDoFragment()); 
     ft.add(R.id.list_view_fragment, new ToDoListFragment()); 
     ft.commit(); 

    } 

    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, todoItems); 
    listToDo.setListAdapter(adapter); 
} 

public void OnToDoAdded(String newToDo) { 
    todoItems.add(newToDo); 
    adapter.notifyDataSetChanged(); 

} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    // TODO Auto-generated method stub 
    super.onSaveInstanceState(outState); 

    outState.putStringArrayList("todoItemTag", todoItems); 

} 

    } 

ToDoListFragment.java

public class ToDoListFragment extends ListFragment{ 

}

,617 451,515,

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context=".MainActivity" 
android:orientation="vertical"> 

<FrameLayout 
    android:name="com.example.todolistwithconfiguration.AddToDoFragment" 
    android:id="@+id/add_to_do_fragment" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_weight="0.5"/> 

<FrameLayout 
    android:name="com.example.todolistwithconfiguration.ToDoListFragment" 
    android:id="@+id/list_view_fragment" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_weight="1.5" 
    android:visibility="gone"/> 

로그 캣

  • 10-29 17 : 21 : D/AndroidRuntime (788) : VM
  • 종료
  • 10-29 17 59.783 : 21 : 59.783 : W/dalvikvm (788) : threadid = 1 : 스레드가 종료 됨 예기치 않은 예외 (그룹 = 0x414c4700)
  • 10-29 1 7 : 21 : 59.863 : E/AndroidRuntime (788) : 치명적인 예외 : 주
  • 10-29 17 : 21 : 59.863 : E/AndroidRuntime (788) : java.lang.RuntimeException : 활동을 시작할 수 없습니다. ComponentInfo {com .example.todolistwithdynamicfragments/com.example.todolistwithdynamicfragments.MainActivity} java.lang.NullPointerException이
  • 10-29 17 : 21 : 59.863 : E/AndroidRuntime (788)에서 android.app.ActivityThread.performLaunchActivity (ActivityThread 된 .java : 2,211)
  • 10-29 17 : 21 : 59.863 : E/AndroidRuntime (788) android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2261 AT)
  • 10/29 17 : 21 : 59.863 : E/AndroidRuntime (788) : android.app.ActivityThread.access $ 600 (ActivityThread.java:141)
  • 10-29 17 : 21 : 59.863 : E/AndroidRuntime (788)) : 21 : 59.863 : E/AndroidRuntime (788)에서 android.os.Handler.dispatchMessage (처리기 android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1256)
  • 10-29 17 된 .java 99)
  • 10-29 17 : 21 : 59.863 : E/AndroidRuntime (788) android.os.Looper.loop (Looper.java:137 AT)
  • 10-29 17시 21분 : 59.863 : E/AndroidRuntime (788) : 에서 android.app.ActivityThread.main (ActivityThread.ja) VA : 5103)
  • 10-29 17 : 21 : 59.863 : E/AndroidRuntime (788) : 21 : 59.863 java.lang.reflect.Method.invokeNative (원시 메소드)
  • 10-29 17 : E/AndroidRuntime (788) : 에서 java.lang.reflect.Method.invoke (Method.java:525)
  • 10-29 17 : 21 : 59.863 : E/AndroidRuntime (788) : 에서 com.android. internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:737)
  • 10-29 17 : 21 : 59.863 : E/AndroidRuntime (788)에서 com.android.internal.os.ZygoteInit.main (ZygoteInit.java:553)
  • 10-29 17 : 21 : 59.863 : E/AndroidRuntime (788) : 21 : 59.863 :
  • 10-29 17 dalvik.system.NativeStart.main (원시 메소드)에서 E/AndroidRuntime (788) java.lang.NullPointerException이
  • 10-29 17 : 21 : 59.863 : E/AndroidRuntime (788) com.example.todolistwithdynamicfragments.MainActivity.onCreate (MainActivity.java:40 AT)에 의한
  • 10-29 17 : 21 : 59.863 : E/AndroidRuntime (788) : android.app.Activity.performCreate (Activity.java:5133)
  • 10-29 17 : 21 : 59.863 : E/AndroidRuntime (788)) : 21 : 59.863 : E/AndroidRuntime (788)에서 android.app.ActivityThread.performLaunchActivity (ActivityThread.java android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1087)
  • 10-29 17 : 2175)
  • 10-29 17 : 21 : 59.863 : E/AndroidRuntime (788) : ... 11 더
  • 10-29 17 : 22 : 27.032 : I/Process (788) : 보내는 신호. PID : 788 SIG : 9

답변

0
이에 MainAcitivity.java 변경

:

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     if(savedInstanceState == null) { 
      FragmentManager fm = getFragmentManager(); 
      FragmentTransaction ft = fm.beginTransaction(); 
      ft.add(R.id.add_to_do_fragment, new AddToDoFragment()); 
      ft.add(R.id.list_view_fragment, new ToDoListFragment()); 
      ft.commit(); 
     } 
    } 
} 

그리고 당신의 ToDoListFragment.java이에 :

public class ToDoListFragment extends ListFragment { 

    private List<String> todoItems; 

    @Override 
    protected void onViewCreated(View view, Bundle savedInstanceState) { 
     SharedPreferences preferences = this.getActivity().getSharedPreferences("pref",0);  
     this.todoItems = new ArrayList<String>(); 

     HashSet<String> savedItems = preferences.getStringSet("todoItems", new HashSet<String>()); 
     this.todoItems.addAll(savedItems); 

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, this.todoItems); 
     this.setListAdapter(adapter); 
    } 
} 

은 내가 todoItems을 저장 된 SharedPreferences를 사용합니다. AddToDoFragment에서 SharedPreferences에 액세스하고 List에 항목을 추가 할 수 있습니다.

+0

에서 무엇보다 당신의 ToDoListFragmentsetListAdapter()을하려고하지만 여전히 XML 코드가 확인하는 경우 .. 가 궁금 작동하지 않습니다? – cgbs

+0

정확히 작동하지 않는 경우 앱이 시작되지만 조각이 누락 되었습니까? –

+0

응용 프로그램이 시작되지 않습니다. 에뮬레이터에서 다음과 같은 메시지를 보냅니다. Unfortunatelly ToDoListWihtDynamicFragment (내 응용 프로그램 이름)이 중지되었습니다. – cgbs

0

오히려 당신이 제안 무엇을하려고 현재 Activity

관련 문제