2015-01-15 84 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