- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试将我的一个应用程序转换为使用 Fragments 来改进应用程序在 ICS/Honeycomb 上的外观和工作方式,但我遇到了一个问题,尽管我已经花了很多时间在谷歌上搜索和阅读这里的答案我似乎找不到解决方法。
我有一个自定义列表适配器,用于显示我从 SQLite 数据库获得的一些信息。在我尝试在 Activity 中显示时转换为 fragment 之前,它工作正常。
但是,当我尝试将 ListView 放入应用程序 FC 的 fragment 中时,出现以下错误:
W/dalvikvm( 540): threadid=1: thread exiting with uncaught exception (group=0x4
09951f8)
E/AndroidRuntime( 540): FATAL EXCEPTION: main
E/AndroidRuntime( 540): java.lang.NullPointerException
E/AndroidRuntime( 540): at com.msi.shortwave.FreqAdaptor.getView(FreqAda
ptor.java:43)
E/AndroidRuntime( 540): at android.widget.AbsListView.obtainView(AbsList
View.java:2033)
E/AndroidRuntime( 540): at android.widget.ListView.makeAndAddView(ListVi
ew.java:1772)
E/AndroidRuntime( 540): at android.widget.ListView.fillDown(ListView.jav
a:672)
E/AndroidRuntime( 540): at android.widget.ListView.fillFromTop(ListView.
java:732)
E/AndroidRuntime( 540): at android.widget.ListView.layoutChildren(ListVi
ew.java:1625)
E/AndroidRuntime( 540): at android.widget.AbsListView.onLayout(AbsListVi
ew.java:1863)
E/AndroidRuntime( 540): at android.view.View.layout(View.java:11158)
E/AndroidRuntime( 540): at android.view.ViewGroup.layout(ViewGroup.java:
4197)
E/AndroidRuntime( 540): at android.widget.LinearLayout.setChildFrame(Lin
earLayout.java:1628)
E/AndroidRuntime( 540): at android.widget.LinearLayout.layoutVertical(Li
nearLayout.java:1486)
E/AndroidRuntime( 540): at android.widget.LinearLayout.onLayout(LinearLa
yout.java:1399)
E/AndroidRuntime( 540): at android.view.View.layout(View.java:11158)
E/AndroidRuntime( 540): at android.view.ViewGroup.layout(ViewGroup.java:
4197)
E/AndroidRuntime( 540): at android.widget.LinearLayout.setChildFrame(Lin
earLayout.java:1628)
E/AndroidRuntime( 540): at android.widget.LinearLayout.layoutHorizontal(
LinearLayout.java:1617)
E/AndroidRuntime( 540): at android.widget.LinearLayout.onLayout(LinearLa
yout.java:1401)
E/AndroidRuntime( 540): at android.view.View.layout(View.java:11158)
E/AndroidRuntime( 540): at android.view.ViewGroup.layout(ViewGroup.java:
4197)
E/AndroidRuntime( 540): at android.widget.LinearLayout.setChildFrame(Lin
earLayout.java:1628)
E/AndroidRuntime( 540): at android.widget.LinearLayout.layoutVertical(Li
nearLayout.java:1486)
E/AndroidRuntime( 540): at android.widget.LinearLayout.onLayout(LinearLa
yout.java:1399)
E/AndroidRuntime( 540): at android.view.View.layout(View.java:11158)
E/AndroidRuntime( 540): at android.view.ViewGroup.layout(ViewGroup.java:
4197)
E/AndroidRuntime( 540): at android.widget.FrameLayout.onLayout(FrameLayo
ut.java:431)
E/AndroidRuntime( 540): at android.view.View.layout(View.java:11158)
E/AndroidRuntime( 540): at android.view.ViewGroup.layout(ViewGroup.java:
4197)
E/AndroidRuntime( 540): at android.widget.LinearLayout.setChildFrame(Lin
earLayout.java:1628)
E/AndroidRuntime( 540): at android.widget.LinearLayout.layoutVertical(Li
nearLayout.java:1486)
E/AndroidRuntime( 540): at android.widget.LinearLayout.onLayout(LinearLa
yout.java:1399)
E/AndroidRuntime( 540): at android.view.View.layout(View.java:11158)
E/AndroidRuntime( 540): at android.view.ViewGroup.layout(ViewGroup.java:
4197)
E/AndroidRuntime( 540): at android.widget.FrameLayout.onLayout(FrameLayo
ut.java:431)
E/AndroidRuntime( 540): at android.view.View.layout(View.java:11158)
E/AndroidRuntime( 540): at android.view.ViewGroup.layout(ViewGroup.java:
4197)
E/AndroidRuntime( 540): at android.view.ViewRootImpl.performTraversals(V
iewRootImpl.java:1462)
E/AndroidRuntime( 540): at android.view.ViewRootImpl.handleMessage(ViewR
ootImpl.java:2382)
E/AndroidRuntime( 540): at android.os.Handler.dispatchMessage(Handler.ja
va:99)
E/AndroidRuntime( 540): at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime( 540): at android.app.ActivityThread.main(ActivityThrea
d.java:4340)
E/AndroidRuntime( 540): at java.lang.reflect.Method.invokeNative(Native
Method)
E/AndroidRuntime( 540): at java.lang.reflect.Method.invoke(Method.java:5
11)
E/AndroidRuntime( 540): at com.android.internal.os.ZygoteInit$MethodAndA
rgsCaller.run(ZygoteInit.java:784)
E/AndroidRuntime( 540): at com.android.internal.os.ZygoteInit.main(Zygot
eInit.java:551)
E/AndroidRuntime( 540): at dalvik.system.NativeStart.main(Native Method)
W/ActivityManager( 84): Force finishing activity com.msi.shortwave/.main
fragment (results.xml)布局是:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ListView android:id="@+id/ListView01" android:layout_width="fill_parent"
android:layout_height="100dp"
android:layout_weight="0"
android:cacheColorHint="#00000000"></ListView>
</LinearLayout>
我的自定义列表适配器使用的 row.xml 文件如下(android:text 条目只是占位符,这被应用程序替换为站名之类的东西)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/LinearLayout01"
android:layout_width="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"
android:paddingLeft="10sp" android:paddingRight="10sp"
android:layout_height="20dp"
android:orientation="vertical" android:paddingTop="2sp">
<TextView android:layout_height="wrap_content"
android:layout_width="fill_parent" android:id="@+id/tvStationname"
android:text="BBC World Service" android:typeface="sans" android:textSize="16sp" android:textColor="#990200" android:textStyle="bold"></TextView>
<LinearLayout android:id="@+id/LinearLayout02"
android:layout_height="wrap_content"
android:layout_width="fill_parent">
<TextView android:id="@+id/TextView01" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:textStyle="bold"
android:text="Start:" android:textSize="13sp" android:textColor="#000000" android:paddingRight="5sp"></TextView>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="00:00" android:textColor="#000000"
android:id="@+id/tvStarttime" android:textSize="13sp"
></TextView>
<TextView android:id="@+id/TextView02" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:textStyle="bold" android:textColor="#000000"
android:text="End:" android:textSize="13sp" android:paddingLeft="5sp" android:paddingRight="5sp"></TextView>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="01:00" android:textColor="#000000"
android:id="@+id/tvEndtime" android:textSize="13sp"></TextView>
<TextView android:id="@+id/TextView03" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:textStyle="bold"
android:text="Target Area:" android:textSize="13sp" android:textColor="#000000"
android:paddingLeft="5sp" android:paddingRight="5sp"></TextView>
<TextView android:id="@+id/tvTarget" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:textColor="#000000"
android:text="LA, NA" android:textSize="13sp"></TextView>
</LinearLayout>
<LinearLayout android:id="@+id/LinearLayout02"
android:layout_height="wrap_content"
android:layout_width="fill_parent">
<TextView android:id="@+id/TextView01" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:textStyle="bold" android:textColor="#000000"
android:text="Frequencies " android:textSize="13sp"></TextView>
<HorizontalScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scrollbars ="none"
>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="12312, 12314, 14131, 12312"
android:id="@+id/tvFreqs" android:textColor="#000000" android:textSize="13sp" android:layout_weight="1" android:singleLine="true" ></TextView>
</HorizontalScrollView>
</LinearLayout>
我的列表适配器被调用
list = (ListView) v.findViewById(R.id.ListView01);
list.setAdapter(adapter);
我的自定义 ListView 中的代码是 FreqAdaptor.java - 崩溃发生在“public View getView”中,并通过注释显示:
package com.msi.shortwave;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.TextView;
public class FreqAdaptor extends BaseAdapter implements OnClickListener {
private Context context;
private LayoutInflater inflate;
private List<Freqlist> listFreq;
public FreqAdaptor(Context context, List<Freqlist> listFreq, LayoutInflater inflate) {
this.context = context;
this.listFreq = listFreq;
this.inflate = inflate;
}
public int getCount() {
return listFreq.size();
}
public Object getItem(int position) {
return listFreq.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup viewGroup) {
Freqlist entry = listFreq.get(position);
if (convertView == null) {
convertView = inflate.inflate(R.layout.row, null);
//crash is here. inflate is the one used by the view on my results.java file.
// I have also tried with LayoutInflater inflate = (LayoutInflater) context
// .getSystemService(Context.LAYOUT_INFLATER_SERVICE); but I get the
//same result
}
TextView tvStationname = (TextView) convertView.findViewById(R.id.tvStationname);
tvStationname.setText(entry.getStationname());
TextView tvStarttime = (TextView) convertView.findViewById(R.id.tvStarttime);
tvStarttime.setText(entry.getStarttime());
TextView tvEndtime = (TextView) convertView.findViewById(R.id.tvEndtime);
tvEndtime.setText(entry.getEndtime());
TextView tvTarget = (TextView) convertView.findViewById(R.id.tvTarget);
tvTarget.setText(entry.getTargets());
TextView tvFreqs = (TextView) convertView.findViewById(R.id.tvFreqs);
tvFreqs.setText(entry.getFreqs());
return convertView;
}
@Override
public void onClick(View view) {
Freqlist entry = (Freqlist) view.getTag();
}
}
我的 results.java 文件以以下内容开头。如前所述,我曾尝试为我的 FreqAdaptor.java 使用相同的充气器,并尝试制作一个新的充气器,但我遇到了同样的崩溃。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
v = inflater.inflate(R.layout.results, container, false);
Bundle bund1 = getArguments();
passinflate = inflater;
String time = bund1.getString("time");
String target = bund1.getString("target");
String station = bund1.getString("station");
String freq = bund1.getString("freq");
new searchdb().execute(time,target,station,freq);
return v;
}
有人可以帮忙吗?正如我所提到的,这在不使用 fragment 的情况下也能正常工作。应用程序在这里 https://market.android.com/details?id=com.msi.shortwave如果有人需要它给我一些建议,我可以提供完整的源代码,因为我真的坚持使用它。
使用上面的 [code] 部分发布时,我的一些缩进被弄乱了。不知道为什么。
编辑 - 我的 XML 文件看起来正常吗?我什至更改为 ListFragment 并将此处的 xml 文件用于我的 fragment - developer.android.com/reference/android/app/ListFragment.html 但同样的事情不断发生。有人有什么想法吗?
最佳答案
当我们使用 ListView With Fragment 并且ids、ViewHolder 或 inflater 没有错误但我们仍然得到 Null pionter 或等等。异常然后我们需要检查 fragment 生命周期 - 意味着我们何时何地在 fragment 中设置我们的适配器,有时如果我们在 onCreateView() 设置我们的列表适配器有机会不调用 listAdapter所以,在 onActivityCreated()(When Activity created()) 调用/设置列表适配器。
关于java - 带有自定义列表适配器的 fragment 导致膨胀 View 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8972154/
我需要使用view.getWidth(),但我不能,因为我还没有膨胀 View 。在使用 view.getWidth() 之前如何膨胀 View ? MainActivity 类: p
这个问题很难尝试和表述,但我会尽力而为。 基本上,我有一个应用程序,我想将代码拆分得更多。为了尝试解释这一点,我将举一个我的屏幕示例。 在我的主屏幕上,我有一个标题、用户详细信息、余额、下一个账单详细
我有一个 TableLayout,我在其中动态添加行,一开始是空的,我想在用户单击它时在该行中加载一个 xml。 我已经给行赋值了OnClick方法,但是不知道在onclick方法中进入时如何加载xm
我使用的是 C++ 中的 libcurl 库,这是一个相当大的库(.lib 文件大约 2MB),项目是用 CURL_STATICLIB 编译的 至于现在我只有一个 .cpp 文件,其中包含 heade
背景: 我正在努力使一堆 PNG 尽可能小。我正在使用诸如 PngOut、PngCrush 和 OptiPng 之类的工具。 问题: 我遇到了一个大小为 1434 KB 但只有 230 x 230 像
我一直在努力找出我的应用程序使用的内存不断增长的原因,直到在 heroku 上的生产中它失败并下降。 经过一些相当广泛的研究,使用 Top 观察 RSIZE 在本地增长并使用 Oink 尝试查明我只是
我有一个使用 C++ 版本的 zlibs deflate 压缩的数据 ArrayBuffer(使用默认值)。由于没有服务器,我现在需要在客户端中增加这些数据。我已经使用 C++ 中的默认 inflat
我的代码有问题: @Override public View getView(int position, View convertView, ViewGroup parent) {
我有一个 fragment ,我像下面一样对其进行膨胀,但它给出了运行时错误: public View onCreateView(LayoutInflater inflater, ViewGroup
我正在学习 Fragment,并且我是通过在 Fragment 中使用 FB Login 来学习的。但我不断收到异常 Error inflateing class com.facebook.login
第一种方法: LinearLayout parent = ...; View child = LayoutInflator.inflate(context, parent, true); 第二种方法:
我刚刚完成了一个站点构建,在该站点构建中,我们必须将文件提供给第 3 方以与他们的系统集成。构建必须是独立的,因为会有多方部署它们,能力水平各不相同。 我遇到的问题是,在下载我的 Javascript
我正在寻找一种方法来“扩充”Android XML 布局,这在编译时是未知的。我已经搜索了几个小时,总能找到答案,这是不可能的,因为 LayoutInflater 不能使用简单的 XML 文件。好的,
我有一个从 Faragment 扩展而来的类,叫做 Agenda。它的布局有一个 listView,但是当这个类返回到主 Activity 时,我得到了一个错误。这是错误和代码: > 03-11 13
我的应用程序一启动就崩溃了。我收到以下错误: android.view.InflateException: Binary XML file line #34: Error inflating clas
我想膨胀 R.id.catText,但如果我自己膨胀它,它永远不会显示。如果我inflate R.id.assets(容器),那么两个元素都会正常显示。我只是不想要容器。如何在不膨胀 R.id.ass
我尝试创建自定义 ViewGroup 类,但是当我使用方法 findViewById() 时它返回 null,但展开 View 是可以的。 代码是: public class HorizontalLi
我正在尝试创建一个在屏幕上滑动的 textView,但它会产生错误,但我不知道为什么。这是我的 xml: 还有我的 Activity 课: package com.exampl
我正在构建一个应用程序,我在其中使用了 glomadrain 的动画切换按钮。完成编码后出现以下错误: at com.android.internal.os.ZygoteInit.main(Zygot
我只是想按照 android dev 上的示例代码来膨胀 Activity 中的 fragment 。我有一个更复杂的项目正在工作,但我遇到了与这里的简单项目相同的错误。谁能指出我正确的方向? 扩展
我是一名优秀的程序员,十分优秀!