我是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;
}
}
}
答案 0 :(得分:0)
我认为您需要检查两个片段中的哪一个是“活着的”。如果片段B处于活动状态,请先尝试关闭它并重新打开片段A.然后您可以继续此过程。