2014-04-16 4 views
0

제목에 나와있는 것처럼 사용자 지정 목록보기 어댑터가 올바르게 작동하는 데 문제가 있습니다. 앱은 목록에 아무 것도 표시하지 않고 그냥 빈 화면 만 표시합니다. 필자는 이미 설치가되어있는 간단한 목록으로 데이터를 테스트 한 결과 정상적으로 작동했습니다.사용자 지정 목록보기 어댑터가있는 화면에 아무 것도 표시되지 않습니다.

History.java

public class History { 
    public String score; 
    public String gametype; 
    public int icon; 

    public History() { 
     super(); 
    } 

    public History(String score, String gametype, int icon) { 
     super(); 
     this.score = score; 
     this.gametype = gametype; 
     this.icon = icon; 
    } 
} 

HistoryAdapter.java

public class HistoryAdapter extends ArrayAdapter<History> { 

    Context context; 
    int layoutResId; 
    History data[] = null; 

    public HistoryAdapter(Context context, int layoutResId, History[] data) { 
     super(context, layoutResId, data); 
     this.layoutResId = layoutResId; 
     this.context = context; 
     this.data = data; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     HistoryHolder holder = null; 

     if(convertView == null) 
     { 
      LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
      convertView = inflater.inflate(layoutResId, parent, false); 

      holder = new HistoryHolder(); 
      holder.imageIcon = (ImageView)convertView.findViewById(R.id.icon); 
      holder.textTitle = (TextView)convertView.findViewById(R.id.gameType); 
      holder.textScore = (TextView)convertView.findViewById(R.id.score); 

      convertView.setTag(holder); 
     } 
     else 
     { 
      holder = (HistoryHolder)convertView.getTag(); 
     } 

     History history = data[position]; 
     holder.textScore.setText(history.score); 
     holder.textTitle.setText(history.gametype); 
     holder.imageIcon.setImageResource(history.icon); 


     return convertView; 
    } 

    static class HistoryHolder 
    { 
     ImageView imageIcon; 
     TextView textTitle; 
     TextView textScore; 
    } 
} 

구현

for(int i = 0; i < games.length(); i++) { 
        JSONObject c = games.getJSONObject(i); 
        JSONObject gameStats = games.getJSONObject(i).getJSONObject(TAG_STATS); 
        type[i] = c.getString(TAG_TYPE); 
        champId[i] = c.getString("championId"); 
        cs[i] = gameStats.getString("minionsKilled"); 
        kills[i] = gameStats.getString("championsKilled"); 
        deaths[i] = gameStats.getString("numDeaths"); 
        assists[i] = gameStats.getString("assists"); 
        win[i] = gameStats.getString("win"); 

        if(win[i].equals("true")) 
         win[i] = "Victory"; 
        else 
         win[i] = "Defeat"; 

        if(type[i].equals("RANKED_SOLO_5x5")) 
         type[i] = "Ranked (Solo)"; 

        if(type[i].equals("CAP_5x5")) 
         type[i] = "TeamBuilder"; 

        if(type[i].equals("NORMAL")) 
         type[i] = "Unranked"; 

        score[i] = kills[i] +"/" + deaths[i] + "/" + assists[i]; 

        historyData[i] = new History(score[i], champId[i], R.drawable.ic_launcher); // Placeholder image 

       } 

       adapter = new HistoryAdapter(MatchHistoryActivity.this, 
         R.layout.list_adapter, 
         historyData); 

       list.setAdapter(adapter); 

listview.xml

<?xml version="1.0" encoding="utf-8"?> 

<ListView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/list" 
    android:background="#111111"> 
    </ListView> 
,

list_item.xml는

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="?android:attr/listPreferredItemHeight" 
    android:background="#111111" 
    android:padding="6dip" > 

    <ImageView 
     android:id="@+id/icon" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentTop="true" 
     android:layout_marginRight="6dip" 
     android:contentDescription="TODO" 
     android:src="@drawable/ic_launcher" /> 

    <TextView 
     android:id="@+id/score" 
     android:textColor="#C49246" 
     android:layout_width="fill_parent" 
     android:layout_height="26dip" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:layout_marginLeft="5dp" 
     android:layout_toRightOf="@id/icon" 
     android:ellipsize="marquee" 
     android:singleLine="true" 
     android:text="0/0/0 KDA" 
     android:textSize="12sp" /> 

    <TextView 
     android:id="@+id/gameType" 
     android:textColor="#C49246" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_above="@id/score" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:layout_alignWithParentIfMissing="true" 
     android:layout_marginLeft="5dp" 
     android:layout_toRightOf="@id/icon" 
     android:gravity="center_vertical" 
     android:textSize="16sp" /> 

</RelativeLayout> 
+0

'ListView' 배경을'transparent'로 변경하고'ListItem Relative Layout' 배경을'android : background = "# some other color"로 변경하십시오. –

+0

@SimplePlan 이렇게하면 아무 결과도없고, 똑같은, 빈 흰색 화면. – Nate

답변

0

당신은 사용자 정의 어댑터를 getCount()를 오버라이드 (override) 할 필요가있다. ListView의 항목 수를 반환합니다.

@Override 
public int getCount() { 
    return myArrayList.size(); 
} 
+0

getCount() 메서드를 재정의해야하는 이유와 그 반대의 이유를 설명해 주시겠습니까? getCount() 및 getItem() 메서드를 재정의하려고했지만 내 응용 프로그램이 충돌합니다. – Kramer

+0

도움이 필요하시면 로그를 게시하십시오. 어댑터는'getCount()'메서드를 사용하여 목록에 표시 할 항목 수를 결정합니다. –

+0

ArrayAdapter를 BaseAdapter로 대체 한 후 모든 것이 정상적으로 작동합니다. 귀하의 답변에 감사드립니다. – Kramer

0

난 당신이 BaseAdapter에 의해 ArrayAdapter를 교체하고 예를 들어, 필요한 모든 메소드를 구현해야한다고 생각 getItemId(), getItem(), getCount(), getView().
잘 작동합니다!. 아래 예제 코드는 MusicModel이 무엇인지 신경 쓰지 않습니다.

protected class MusicCustomAdapter extends BaseAdapter { 

     private Activity context; 
     private List<MusicModel> musicModelList; 
     private SimpleDateFormat sdf = new SimpleDateFormat("mm:ss"); 

     public MusicCustomAdapter(Activity context, List<MusicModel> musicModelList) { 
      this.context = context; 
      this.musicModelList = musicModelList; 
     } 

     @Override 
     public long getItemId(int position) { 
      return 0; 
     } 

     @Override 
     public Object getItem(int position) { 
      return this.musicModelList.get(position); 
     } 

     @Override 
     public int getCount() { 
      return this.musicModelList.size(); 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      View view = convertView; 
      if (view == null) { 
       view = context.getLayoutInflater().inflate(R.layout.song_item, null); 
      } 

      MusicModel musicModel = (MusicModel) getItem(position); 

      TextView tvMusicName = (TextView) view.findViewById(R.id.tv_song_name); 
      tvMusicName.setText(musicModel.getName()); 

      TextView tvArtist = (TextView) view.findViewById(R.id.tv_artist); 
      tvArtist.setText(musicModel.getArtist()); 

      TextView tvDuration = (TextView) view.findViewById(R.id.tv_duration); 
      tvDuration.setText(sdf.format(musicModel.getDuration())); 

      ImageView imgThumbnail = (ImageView) view.findViewById(R.id.img_thumbnail); 
      imgThumbnail.setImageDrawable(musicModel.getThumbnail()); 

      return view; 
     } 
    } 

희망 도움말.

관련 문제