在android中使用两个Fragment时出错

时间:2014-05-17 19:34:38

标签: android fragment

我是android新手我在使用片段时遇到困难任何帮助都非常感谢。我正在使用平板电脑片段。有两个片段假设FragmentA(左侧片段)和FragmentB(右侧片段)都是列表片段,FragmentB根据FragmentA变化。还有另一个片段FragmentC在单击FragmentB列表上的项目时会膨胀。现在,当我点击FragmentA后我的应用程序崩溃时,给FragmentC充气。 logcat中存在错误,显示FragmentC无法转换为FragmentB。我试图从最近10个小时解决这个问题,但没有结果出来。

这是我的MainActivity类

public class MainActivity extends FragmentActivity implements FragmentA.Communicator{
    FragmentManager manager;
    FragmentB frag2;
    FragmentA frag1;
    @SuppressLint("NewApi")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.frag);
        manager=getSupportFragmentManager();
        FragmentA frag1=(FragmentA ) manager.findFragmentById(R.id.fragment1);
    frag1.setCommunicator(this);


    }

    @SuppressLint("NewApi")
    @Override
    public void respond(int index) {
        // TODO Auto-generated method stub

        frag2= (FragmentB) manager.findFragmentById(R.id.fragment2);
        frag2.changeData(index);
        }
} 

这是我的FragmentA类

public class FragmentA extends Fragment implements OnItemClickListener{
      Communicator comm;
       ListView list;
      String[] items={"Beverages","Food"};


      @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container,
          Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.menu_list,container, false);
      list=(ListView) view.findViewById(R.id.listView1);


     ArrayAdapter<String> adapter= new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1,items);
      list.setAdapter(adapter);
      list.setOnItemClickListener(this);
        return view;
      }
    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int i, long arg3) {
        // TODO Auto-generated method stub
        comm.respond(i);

    }

public void setCommunicator(Communicator communicator){
    this.comm=communicator;
}
public interface Communicator{
    public void respond(int index);
}

    }

这是我的FragmentB类

public class FragmentB extends Fragment implements OnItemClickListener {
ListView listmenu;

String[] listItem1={"item1","item2","item3","item4","item5"};
String[] listItem2={"itemA","itemB","itemC","itemD","itemE"};

 @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
      Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.menu, container, false);
    listmenu=(ListView) view.findViewById(R.id.listView_menu);



    return view;
  }


public void changeData(int index){

    if(index==0){

         ArrayAdapter<String> adapter=new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1,listItem1);
  listmenu.setAdapter(adapter);     



            }


        }
    if(index==1){
     ArrayAdapter<String> adapter=new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1,listItem2);
  listmenu.setAdapter(adapter);



    }

    listmenu.setOnItemClickListener(this);
}


@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
    // TODO Auto-generated method stub
    //Intent intent = null;

    switch(position){
    case 0: FragmentManager manager=getFragmentManager();
        Fragment frag1=new FragmentC();
        FragmentTransaction ft=manager.beginTransaction();
        ft.replace(R.id.fragment2, frag1,"A");
        ft.addToBackStack("A");
        ft.commit();

        break;
    }

}

} 

1 个答案:

答案 0 :(得分:0)

我认为您需要检查两个片段中的哪一个是“活着的”。如果片段B处于活动状态,请先尝试关闭它并重新打开片段A.然后您可以继续此过程。