2015-01-15 85 views
0

我遇到問題,將我的活動分解成碎片。我搜索了幾種如何做到這一點的方法,但即使如此,我也感到困惑。Android - 如何轉換代碼活動代碼片段?

我知道,這是很多代碼。我希望你能幫助我。

顯示我需要什麼,但執行按鈕的動作時,會出現以下錯誤。

E/AndroidRuntime﹕ FATAL EXCEPTION: main 
java.lang.NullPointerException 
     at ..TaskFragment.onActivityCreated(TaskFragment.java:29) 
     at ..TaskFragment.onCreateView(TaskFragment.java:37) 

Activity類..它的工作原理

public class TaskActivity extends Activity { 


TareaAdapter adapter; 
ListView lvTask; 
ArrayList<Task> listTask; 
@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.fragment_tareas); 
    lvTask =(ListView)findViewById(R.id.lvTareas); 
    lvTask.setDividerHeight(1); 
    listTask =new ArrayList<Task>(); 
} 

@Override 
protected void onResume() 
{ 
    if(listTask.size()==0){ 
     populateList(); 
    } 
    super.onResume(); 
} 

public Task getTask(int level, int haschild){ 
    Task task =new Task(); 
    task.nombre ="Nombre Tarea"; 
    task.isAbierto =false; 
    task.nivel =level; 
    task.tieneHijo = haschild; 
    return task; 
} 
public void populateList() 
{ 
    try 
    { 
     for(int i=0;i<2;i++){ 
      listTask.add(getTask(0, 1)); 
     } 
     adapter = new TareaAdapter(TaskActivity.this, listTask); 
     lvTask.setAdapter(adapter); 
    } 
    catch (Exception e) 
    { 

    } 
} 
public void CellButtonClick(View v){ 
    try{ 
     Button b=(Button)v; 
     int index; 
     index=(Integer) b.getTag(); 

     if(b.getText().toString().equals("+")){ 
      b.setText("-"); 
      Task temp[]=new Task[2]; 
      int PLevel= listTask.get(index).nivel +1; 
      for(int i=0;i<2;i++){ 
       temp[i]= getTask(PLevel, 1); 
      } 
      listTask.get(index).isAbierto =true; 
      if(temp!=null){ 
       int addindex=index+1; 
       for(int i=0;i<temp.length;i++){ 
        listTask.add(addindex, temp[i]); 
        addindex++; 
       } 
      } 
      temp=null; 
     } 
     else{ 
      b.setText("+"); 
      listTask.get(index).isAbierto =false; 
      int removeindex=index+1; 
      for(int i=0;i<2;i++){ 
       if(listTask.get(removeindex).isAbierto){ 
        removeChilds(removeindex); 
       } 
       listTask.remove(removeindex); 
      } 
     } 
     adapter.notifyDataSetChanged(); 
    } 
    catch(Exception e){ 
     adapter.notifyDataSetChanged(); 

    } 
} 
public void removeChilds(int index){ 
    try { 
     int removeindex=index+1; 
     for(int i=0;i<2;i++){ 
      if(listTask.get(removeindex).isAbierto){ 
       removeChilds(removeindex); 
      } 
      listTask.remove(removeindex); 
     } 
    } catch (Exception e) { 
     // TODO: handle exception 

    } 
} 

片段類..應用程序崩潰

公共類TaskFragment擴展片段{

TareaAdapter adapter; 
ListView lvTask; 
ArrayList<Task> listTask; 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    lvTask =(ListView) getView().findViewById(R.id.lvTareas); 
    lvTask.setDividerHeight(1); 
    listTask =new ArrayList<Task>(); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    View viewRoot = inflater.inflate(R.layout.fragment_tareas, container, false); 
    Button btnExpandir = (Button) viewRoot.findViewById(R.id.btnExpandirTarea); 
    btnExpandir.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      CellButtonClick(v); 
     } 
    }); 
    return viewRoot; 
} 

@Override 
public void onResume() 
{ 
    if(listTask.size()==0){ 
     populateList(); 
    } 
    super.onResume(); 
} 

public Task getTask(int level, int haschild){ 
    Task task =new Task(); 
    task.nombre ="Nombre Tarea"; 
    task.isAbierto =false; 
    task.nivel =level; 
    task.tieneHijo = haschild; 
    return task; 
} 
public void populateList() 
{ 
    try 
    { 
     for(int i=0;i<2;i++){ 
      listTask.add(getTask(0, 1)); 
     } 
     adapter = new TareaAdapter(getActivity(), listTask); 
     lvTask.setAdapter(adapter); 
    } 
    catch (Exception e) 
    { 

    } 
} 
public void CellButtonClick(View v){ 
    try{ 
     Button b=(Button)v; 
     int index; 
     index=(Integer) b.getTag(); 

     if(b.getText().toString().equals("+")){ 
      b.setText("-"); 
      Task temp[]=new Task[2]; 
      int PLevel= listTask.get(index).nivel +1; 
      for(int i=0;i<2;i++){ 
       temp[i]= getTask(PLevel, 1); 
      } 
      listTask.get(index).isAbierto =true; 
      if(temp!=null){ 
       int addindex=index+1; 
       for(int i=0;i<temp.length;i++){ 
        listTask.add(addindex, temp[i]); 
        addindex++; 
       } 
      } 
      temp=null; 
     } 
     else{ 
      b.setText("+"); 
      listTask.get(index).isAbierto =false; 
      int removeindex=index+1; 
      for(int i=0;i<2;i++){ 
       if(listTask.get(removeindex).isAbierto){ 
        removeChilds(removeindex); 
       } 
       listTask.remove(removeindex); 
      } 
     } 
     adapter.notifyDataSetChanged(); 
    } 
    catch(Exception e){ 
     adapter.notifyDataSetChanged(); 

    } 
} 
public void removeChilds(int index){ 
    try { 
     int removeindex=index+1; 
     for(int i=0;i<2;i++){ 
      if(listTask.get(removeindex).isAbierto){ 
       removeChilds(removeindex); 
      } 
      listTask.remove(removeindex); 
     } 
    } catch (Exception e) { 
     // TODO: handle exception 

    } 
} 

回答

0

把這些三個onCreateView線(並刪除相應的行onActivityCreated

lvTask =(ListView) viewRoot.findViewById(R.id.lvTareas); 
lvTask.setDividerHeight(1); 
listTask =new ArrayList<Task>(); 
+0

謝謝你的回答!當我把這三行放入onCreateView時,應用程序崩潰。但是,正如我所看到的那樣,通過點擊 – Jperezoso 2015-01-15 17:13:18

+0

來顯示片段並崩潰。爲新崩潰發佈日誌貓。 – 2015-01-15 17:14:26

+0

我錯了,現在如果它顯示沒有問題。但我無法點擊並顯示信息。 當我運行該應用程序顯示此錯誤 'E/AndroidRuntime:致命異常:主要 java.lang.IllegalStateException:無法.... INICIO爲的onClick處理程序上找到的活動類的方法CellButtonClick(查看)查看類android.widget.Button id爲'btnExpandirTarea' at android.view.View $ 1.onClick(View.java:3026) at android.view.View.performClick(View.java:3480)' – Jperezoso 2015-01-15 18:11:51