gpt4 book ai didi

java - Android 新手 - Fragments

转载 作者:行者123 更新时间:2023-12-01 13:29:23 25 4
gpt4 key购买 nike

Android 编程新手。在过去的三天里,我一直在学习教程,感觉我已经掌握了其中的主要部分。每次我尝试运行以下代码时,android都会导致它在打开之前强制退出。我已经得到了其他更简单的 fragment ,可以毫不费力地工作,但这让我感到困惑。根本没有打印任何错误,可能是因为它立即关闭。任何帮助将不胜感激。

编辑:使用调试器我能够得到一个

 "InflateException: Binary XML file #9: Error inflating class fragment. 

在以下代码之后停止:

 lv = (ListView) view.findViewById(R.id.lvMain);

Frag_MainList.java

public class Frag_MainList extends Fragment implements OnItemClickListener, OnItemLongClickListener{

ListView lv;
ImageView ivAddNote;
Communicator communicator;
Adapter_SQL database = new Adapter_SQL(getActivity());
ArrayList<Element> list;

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

database.open();
list = database.getChildrenLess();
database.close();

Adapter_List adapter = new Adapter_List(getActivity(), list);

lv.setAdapter(adapter);
lv.setOnItemClickListener(this);
lv.setOnItemLongClickListener(this);
return view;
}



@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);

}



@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int pos, long arg3) {
communicator.SendID(pos);
return true;
}


@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int pos, long arg3) {
database.open();
database.switchComplete(list.get(pos).id);
database.close();
}

public void setCommunicator(Communicator communicator){
this.communicator = communicator;

}

public interface Communicator{
public void SendID(int index);
}
}

Activity_Main.java

public class Activity_Main extends Activity implements Frag_MainList.Communicator{

Frag_MainList frag1;
Frag_ListChildren frag_children;
FragmentManager manager;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
manager = getFragmentManager();
frag1 = (Frag_MainList) manager.findFragmentById(R.id.fMainList);
frag1.setCommunicator(this);
}


@Override
public void SendID(int index) {
frag_children = (Frag_ListChildren) manager.findFragmentById(R.id.fListChildren);
if (frag_children != null && frag_children.isVisible()){
frag_children.displayChildren(index);
}else{
Intent intent = new Intent("com.likwid.wishlist.LISTCHILDREN");
intent.putExtra("id", index);
startActivity(intent);
}
}
}

frag_mainlist.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<ListView
android:id="@+id/lvMain"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>

</LinearLayout>

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#00BBFF"
android:orientation="horizontal"
android:id="@+id/main_layout" >

<fragment
android:id="@+id/fMainList"
android:name="com.likwid.wishlist.Frag_MainList"
android:layout_width="wrap_content"
android:layout_height="match_parent" />

</LinearLayout>

最佳答案

我明白了。看来问题出在数据库上。 Frag_MainList 中的 getActivity 将在 Activity 实际创建之前被调用。将 getActivity 放在“onActivityCreated”方法中可以正确调用 getActivity,并且似乎消除了它引起的所有问题。我认为它显示 fragment 错误的原因是因为 fragment 有缺陷,导致无法膨胀。谢谢大家!

关于java - Android 新手 - Fragments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21655053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com