I am attempting to convert one of my apps to use Fragments to improve
how the app looks and works on ICS / Honeycomb but I've come across a
problem which although I've spent many hours Googleing and reading
answers on here I can't seem to find a fix for.

I have a custom list adapter which is used to display some info I get
from an sqllite db. It worked fine before I tried to convert to
fragments when it was being displayed in an activity.

However when I try and put the ListView into a fragment the app FC
with the following error:

    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

The fragment (results.xml) layout is :

    <?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>


My row.xml file used by the custom list adaptor is as follows
(android:text entries are just placeholders, this is replaced by the
app for stuff like the station name)

    <?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>

</LinearLayout>

My list adapter is called by

    list = (ListView) v.findViewById(R.id.ListView01);
    list.setAdapter(adapter);

The code in my customlistview is FreqAdaptor.java - the crash is in
"public View getView" and is shown by comments:

    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();


    }


    }


My results.java file starts with the following. As mentioned I have
tried using the same inflater for my FreqAdaptor.java and have tried
making a new inflater but I get the same crash.

       @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;

           }


Can anyone help? As I mention this works fine without using Fragments.
App is here https://market.android.com/details?id=com.msi.shortwave
and I can provide the full source if anyone needs that to provide me
with some suggestions as I really am stuck with it.

Some of my indentation has been messed up by posting using [code]
sections above. Not sure why.

EDIT - Do my XML files look OK? I've even changed to a ListFragment
and used the xml file here for my fragment- developer.android.com/
reference/android/app/ListFragment.html but the same thing keeps
happening. Anyone got any ideas?

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to