2012-05-09 9 views
3

私の活動では、3つのリストがあり、各リストには3つのアイテムがあります。この方法をテストした後(Android, How to add ScrollView into screen which has some list items?参照)、私は、あなたがアクティビティにいくつかのリストを持っている間、画面をスクロールすることは不可能であることを発見しました。また、私はこの答え(add multiple listview in one activity)が3つのセグメントに分割されているため、すべてのアイテムを表示するのに十分なスペースがなく、画面もスクロールできませんでした。Android、ListViewアイテムを3つの部分に分割する方法は?

1つの愚かな解決策は、各アイテムのxmlを作成し、それをxmlレイアウトのアクティビティに入れることです。それは動作しますが、私は多くの行のコードをコピー/ペーストする必要があります。

もっと良い方法は、アダプタを使用しているので、私の次の試行では、私は最初のリストに2つの他のリストの結果を追加し、アダプタクラスに結果を送信することができます。したがって、アダプターはリスト内のすべての項目を表示します。しかし、私の問題は画面のスクロール(この時点で画面のスクロール=リストのスクロール)を解決しますが、各項目の先頭にヘッダーが必要です。

リストの3つの項目の後に、例えばheader.xmlを追加するようにアダプタに指示することはできますか?

明確に説明してください!下記の今、Javaファイルのコードのおかげ

答えて

1

main.xml

<?xml version="1.0" encoding="utf-8"?> 
<ListView 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@android:id/list" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:drawSelectorOnTop="true" 
/> 

header.xml

<TextView 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:gravity="center" android:scrollbars="none" 
style="?android:attr/listSeparatorTextViewStyle" /> 

SectionedAdapterの.javaファイル

package com.android.listview; 

import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Adapter; 
import android.widget.BaseAdapter; 
import java.util.ArrayList; 
import java.util.List; 

abstract public class SectionedAdapter extends BaseAdapter { 
abstract protected View getHeaderView(String caption, int index, 
View convertView, ViewGroup parent); 

private List 
sections = new ArrayList 
(); 
private static int TYPE_SECTION_HEADER = 1; 

public SectionedAdapter() { 
super(); 
} 

public void addSection(String caption, Adapter adapter) { 
sections.add(new Section(caption, adapter)); 
} 

public Object getItem(int position) { 
for (Section section : this.sections) { 
if (position == 0) { 
return (section); 
} 

int size = section.adapter.getCount() + 1; 

if (position <> 
return (section.adapter.getItem(position - 1)); 
} 

position -= size; 
} 

return (null); 
} 

public int getCount() { 
int total = 0; 

for (Section section : this.sections) { 
total += section.adapter.getCount() + 1; // add one for header 
} 

return (total); 
} 

public int getViewTypeCount() { 
int total = 1; // one for the header, plus those from sections 

for (Section section : this.sections) { 
total += section.adapter.getViewTypeCount(); 
} 

return (total); 
} 

public int getItemViewType(int position) { 
int typeOffset = TYPE_SECTION_HEADER + 1; // start counting from here 

for (Section section : this.sections) { 
if (position == 0) { 
return (TYPE_SECTION_HEADER); 
} 

int size = section.adapter.getCount() + 1; 

if (position <> 
return (typeOffset + section.adapter 
.getItemViewType(position - 1)); 
} 

position -= size; 
typeOffset += section.adapter.getViewTypeCount(); 
} 

return (-1); 
} 

public boolean areAllItemsSelectable() { 
return (false); 
} 

public boolean isEnabled(int position) { 
return (getItemViewType(position) != TYPE_SECTION_HEADER); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
int sectionIndex = 0; 

for (Section section : this.sections) { 
if (position == 0) { 
return (getHeaderView(section.caption, sectionIndex, 
convertView, parent)); 
} 

int size = section.adapter.getCount() + 1; 

if (position <> 
return (section.adapter.getView(position - 1, convertView, 
parent)); 
} 

position -= size; 
sectionIndex++; 
} 

return (null); 
} 

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

class Section { 
String caption; 
Adapter adapter; 

Section(String caption, Adapter adapter) { 
this.caption = caption; 
this.adapter = adapter; 
} 
} 
} 

Selection.java

package com.commonsware.android.listview; 

import android.app.ListActivity; 
import android.content.Context; 
import android.os.Bundle; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 
import java.util.Arrays; 
import java.util.Collections; 
import java.util.List; 

public class SectionedDemo extends ListActivity { 
private static String[] items = { "US", "UK", "CANADA", "JAPAN", "SINGAPORE", 
"INDIA", "CHINA" }; 

private static String[] Sect = { "GOOGLE", "FACEBOOK","DELL" }; 

private static String[] Doc = { "FRONT", "TOP","BACK" }; 

@Override 
public void onCreate(Bundle icicle) { 
super.onCreate(icicle); 
setContentView(R.layout.main); 

adapter.addSection("step 1", new ArrayAdapter(this, 
android.R.layout.simple_list_item_1, items)); 

adapter.addSection("Step 2", new ArrayAdapter(this, 
android.R.layout.simple_list_item_1, Sect)); 

adapter.addSection("Step 3", new ArrayAdapter(this, 
android.R.layout.simple_list_item_1, Doc)); 

setListAdapter(adapter); 
} 

SectionedAdapter adapter = new SectionedAdapter() { 
protected View getHeaderView(String caption, int index, 
View convertView, ViewGroup parent) { 
TextView result = (TextView) convertView; 

if (convertView == null) { 
result = (TextView) getLayoutInflater().inflate(
R.layout.header, null); 
} 

result.setText(caption); 

return (result); 
} 
}; 
} 

LINKLINK

関連する問題