1

私は、SeparatedListAdapterをJeff Sharkeyのように使用しています。私はもともと、このアプリケーションをNexus Oneで開発し始めました.Nexus Oneでは、意図したとおりに動作させることができました。今、私は特定の部分のテストを進めています。私のアプリケーションは、Android 2.1を実行している他のすべての携帯電話でクラッシュしています。私のプロジェクトのビルドターゲットは、これらのすべての携帯電話と同じ2.1アップデート1です。ここでListViewのSeparatedListAdapterをAndroid 2.1でクラッシュすると、2.2で動作する

はLogCatはエラー

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) 

エラーは、「戻るadapter.getView(位置にくると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; 
    } 

によって参照されている自分のコードの関連部分のためであります - 1、convertView、parent); "

StackOverflowでかなりの金額を費やしていたので、何が起こっているのか分かりにくいことがわかりました。ここでは要約です。 ListViewにはスポーツのスコアのリストが表示されるため、各アイテムは2つのチーム名、2つのスコア、アイコンで構成されています。

ヒントはありがたいです。私はSimpleAdapterのコードを見て、エラーの原因を突き止めようとしましたが、それを理解できませんでした。ありがとう。

答えて

1

私はこれを考え出し、おそらく他のAndroid開発者に役立つと考えています。

問題は、SeparatedListAdapter getViewを基になるアダプタが処理していることを行うようにしようとしていたことです。私はSimpleAdapterを拡張するSectionAdapterをアダプタに呼び出しました。ここでは、必要に応じてビュー要素を操作します。私はこの

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

のようなセクションに役立ちます希望を追加する場合。

関連する問題