Domanda

Sto usando SeparatedListAdapter come scritto da Jeff Sharkey . Originariamente ho iniziato a sviluppare questa applicazione su Nexus One, dove ho ottenuto di lavoro esattamente come previsto. Ora mi sto muovendo sul test certe parti, e la mia applicazione si blocca su tutti questi altri telefoni che eseguono Android 2.1. Il mio progetto di costruzione target è 2.1-update1 stesso di tutti questi telefoni.

Questa è la LogCat per l'errore

01-21 18:24:01.486: ERROR/AndroidRuntime(4615): Uncaught handler: thread main exiting due to uncaught exception
01-21 18:24:01.588: ERROR/AndroidRuntime(4615): java.lang.NullPointerException
01-21 18:24:01.588: ERROR/AndroidRuntime(4615):     at android.widget.SimpleAdapter.bindView(SimpleAdapter.java:171)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615):     at android.widget.SimpleAdapter.createViewFromResource(SimpleAdapter.java:138)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615):     at android.widget.SimpleAdapter.getView(SimpleAdapter.java:116)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615):     at com.hitpost.GamesList$SeparatedListAdapter.getView(GamesList.java:347)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615):     at android.widget.AbsListView.obtainView(AbsListView.java:1274)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615):     at android.widget.ListView.makeAndAddView(ListView.java:1668)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615):     at android.widget.ListView.fillDown(ListView.java:637)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615):     at android.widget.ListView.fillSpecific(ListView.java:1224)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615):     at android.widget.ListView.layoutChildren(ListView.java:1511)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615):     at android.widget.AbsListView.onLayout(AbsListView.java:1113)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615):     at android.view.View.layout(View.java:6830)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615):     at android.widget.RelativeLayout.onLayout(RelativeLayout.java:900)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615):     at android.view.View.layout(View.java:6830)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615):     at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615):     at android.view.View.layout(View.java:6830)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615):     at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615):     at android.view.View.layout(View.java:6830)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615):     at android.view.ViewRoot.performTraversals(ViewRoot.java:996)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1633)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615):     at android.os.Looper.loop(Looper.java:123)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615):     at  android.app.ActivityThread.main(ActivityThread.java:4363)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615):     at java.lang.reflect.Method.invokeNative(Native Method)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615):     at java.lang.reflect.Method.invoke(Method.java:521)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
01-21 18:24:01.588: ERROR/AndroidRuntime(4615):     at dalvik.system.NativeStart.main(Native Method)

La parte rilevante del mio codice che fa riferimento il logcat

     @Override  
    public View getView(int position, View convertView, ViewGroup parent) {  
        int sectionnum = 0;  
        for(Object section : this.sections.keySet()) {  
            Adapter adapter = sections.get(section);  
            int size = adapter.getCount() + 1;  


            // check if position inside this section  
            if(position == 0) 
                return headers.getView(sectionnum, convertView, parent);  
            if(position < size) {
                //View row = convertView;
                ScoreViewHolder viewHolder;
                HashMap<String,Object> map = (HashMap<String,Object>) adapter.getItem(position - 1);
                if (convertView == null) {
                    convertView = inflater.inflate(R.layout.league_list_item, null);
                    viewHolder = new ScoreViewHolder();
                    viewHolder.row = (RelativeLayout) convertView.findViewById(R.id.ListItem);
                    viewHolder.checkinImage = (ImageView) viewHolder.row.findViewById(R.id.CheckinLeagueImage);
                    viewHolder.score1 = (TextView) viewHolder.row.findViewById(R.id.Team1Score);
                    viewHolder.score2 = (TextView) viewHolder.row.findViewById(R.id.Team2Score);
                    convertView.setTag(viewHolder);
                } else {
                    viewHolder = (ScoreViewHolder) convertView.getTag();
                }
                if ((Integer) map.get("position") % 2 == 1)
                    viewHolder.row.setBackgroundColor(Color.DKGRAY);
                else
                    viewHolder.row.setBackgroundColor(Color.GRAY);

                if (map.get("gamestatus").equals("Final")) {
                    viewHolder.gameFinal();
                } else if (map.get("gamestatus").equals("In-Progress")) {
                    viewHolder.gameInProgress();
                } else if (map.get("gamestatus").equals("Pre-Game")) {
                    viewHolder.gameFinal();
                }
                viewHolder.row.setOnClickListener(new GameItemListener((String)map.get("id"), 
                        map.get("team2Name") + " " +
                        map.get("team2Score") + " @ " +
                        map.get("team1Name") + " " +
                        map.get("team1Score")                               
                ));
                return adapter.getView(position - 1, convertView, parent);                      
            }

            // otherwise jump into next section  
            position -= size;  
            sectionnum++;  
        }  
        return null;  
    }

Con l'errore venire su "adapter.getView ritorno (posizione - 1, convertView, genitore);"

Dopo aver trascorso una discreta quantità su StackOverflow, lo so che è molto difficile da capire che cosa sta succedendo, ecco un riepilogo. I display ListView un elenco di punteggi per lo sport, in modo che ogni elemento è composto da 2 nomi delle squadre, 2 punteggi e un'icona.

apprezzerebbe eventuali suggerimenti. Ho provato a guardare se il codice di SimpleAdapter per capire che cosa sta causando l'errore, ma non riesco a capire. Grazie.

È stato utile?

Soluzione

Ho capito questo, e sto rispondendo alle forse aiutare altri sviluppatori Android.

Il problema è che stavo cercando di fare SeparatedListAdapter GetView di fare le cose che l'adattatore di fondo dovrebbe essere prendersi cura di. Ho chiamato il mio adattatore un SectionAdapter che si estende SimpleAdapter, dove manipolo mio punto di vista gli elementi come ho bisogno di. Quando aggiungo una sezione come questo

adapter.addSection(currentGameDate, new SectionAdapter(mContext, mActivity, currentGameDateSubset, R.layout.league_list_item, keyNames, keyIds));

La speranza che aiuta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top