2012-04-15 7 views
0

セパレータがあるカスタムリストビューを実装しようとしています。これは、コードである:セパレータ付きのカスタムリストビューが狂ってしまう

SingleTitle:

public class SingleTitle { 
    String mTitle; 
    int[] mInterval; 

    public SingleTitle(String title, int[] interval) { 
     mTitle = title; 
     mInterval = interval; 
    } 

    public String getTitle() { 
     return mTitle; 
    } 

    public int[] getInterval() { 
     return mInterval; 
    } 
} 

TitleCategory:

public class TitleCategory { 
String mTitle; 

public TitleCategory(String title) { 
    mTitle = title; 
} 

public String getTitle() { 
    return mTitle; 
} 
} 

list_category_divider.xml:

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical"> 

<include 
    android:id="@+id/list_item_section_text" 
    layout="@android:layout/preference_category" /> 

</ LinearLayout > 

リストを返すメソッド:

public static List<Object> getStructuredTitles(Context context) { 
    List<Object> list = new ArrayList<Object>(); 
    String[] mTitles = getCategoriesTitles(context); 
    String[] mParts = getPartsTitles(context); 

    list.add(new TitleCategory(mParts[0])); 
    list.add(new SingleTitle(mTitles[0], CATEGORIES_INTERVALS[0])); 
    list.add(new TitleCategory(mParts[1])); 
    list.add(new SingleTitle(mTitles[1], CATEGORIES_INTERVALS[1])); 
    list.add(new SingleTitle(mTitles[2], CATEGORIES_INTERVALS[2])); 
    list.add(new SingleTitle(mTitles[3], CATEGORIES_INTERVALS[3])); 
    list.add(new SingleTitle(mTitles[4], CATEGORIES_INTERVALS[4])); 
    list.add(new TitleCategory(mParts[2])); 
    list.add(new SingleTitle(mTitles[5], CATEGORIES_INTERVALS[5])); 
    list.add(new SingleTitle(mTitles[6], CATEGORIES_INTERVALS[6])); 
    list.add(new SingleTitle(mTitles[7], CATEGORIES_INTERVALS[7])); 
    list.add(new SingleTitle(mTitles[8], CATEGORIES_INTERVALS[8])); 
    list.add(new SingleTitle(mTitles[9], CATEGORIES_INTERVALS[9])); 
    list.add(new SingleTitle(mTitles[10], CATEGORIES_INTERVALS[10])); 
    list.add(new TitleCategory(mParts[3])); 
    list.add(new SingleTitle(mTitles[11], CATEGORIES_INTERVALS[11])); 

    return list; 
} 

マイカスタムアダプタ:

public class TitlesAdapter extends BaseAdapter { 
private Context context; 
private List<Object> entries; 

public TitlesAdapter(Context context, List<Object> entries) { 
    this.context = context; 
    this.entries = entries; 
} 


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

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

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

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    Object entry = entries.get(position); 
    boolean isCategory = (entry instanceof TitleCategory); 

    if (convertView == null) { 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(isCategory ? R.layout.list_category_divider : R.layout.list_items_simple, null); 
    } 

    if (isCategory) { 
     TitleCategory tc = (TitleCategory)entry; 
     convertView.setClickable(false); 

     Log.d("DBG", "Entry: " + position + " | " + tc.getTitle()); 
     TextView tv = (TextView) convertView.findViewById(android.R.id.simple_list_item_2); 
     if (tv != null) tv.setText(tc.getTitle()); 
    } else { 
     SingleTitle tc = (SingleTitle)entry; 

     Log.d("DBG", "Entry: " + position + " | " + tc.getTitle()); 
     TextView tv = (TextView) convertView.findViewById(android.R.id.text1); 
     if (tv != null) 
      tv.setText(tc.getTitle()); 
    } 
    return convertView; 

} 


public List<Object> getList() { 
    return entries; 
} 

public void setList(List<Object> newentries) { 
    entries = newentries; 
    notifyDataSetChanged(); 
} 

} 

私の問題: アプリは、最初はうまくリストを描画しますが、私は上にスクロールし、ドロップダウンリストにはエントリを台無しにするとき。しかし、logcatで生成された出力は正しいですが、Androidはリストを使いこなします。何か案が?

UPDATE: Correct one Wrong one

+0

スクリーンショットを投稿できますか? –

+0

完了;)10chars – Gnufabio

答えて

2

getViewTypeCount()を実装するようにしてください。あなたのケースでは、2を返す必要があります。

@Override 
public int getViewTypeCount() { 
    return 2; 
} 

おそらく、その方法が実装されていない場合、Androidは単一のビュータイプでいくつかの仮定を行います。

また、0または1のいずれかを返すようにするには、リスト内のインデックスが 'カテゴリ'か 'タイトル'かに基づいて、getItemViewType(int position)を上書きします。

@Override 
public int getItemViewType(int position) { 
    ... 
} 
+0

ありがとうございました。でもまだ動作していません。 – Gnufabio

+0

public int getItemViewType(int position)も追加しようとしています。 – alex

+0

それは働いた!ありがとう:) – Gnufabio

関連する問題