Mayra氏のように、UIを再考する必要があります。
複数のリストビューを持たない限り、私はあなたの問題の解決策を見ることができます。スクロールビューにはリストビューが1つしかないようです。つまり、上または下に何かを配置したかったということです。
あなたはsetHeader、setFooterを持っています。あなたが望むものを置くだけです。これらのビューをsetAdapter()の前に追加する必要があります。
スクロールビューに複数のリストビューがある場合。私には2番目の解決策があります。私は本当に詳しく説明することはできません。しかし、カスタムアダプターを作成してViewTypeCountをオーバーライドして、複数のタイプのアイテムを処理できるようにする必要があります。そうすれば、アダプターを通して必要なものすべてをロードできます。そして本当に必要なのはListViewだけです。あなたは、アダプタをサブクラス化し、getViewメソッドをオーバーライドする必要が
あなたがここに項目の複数のタイプ(複数のリストビュー)を処理したい場合は、「未テスト」の例である
。慣習的には、ビューのリサイクルに似たものを用意する必要があります。
if(view == null){
//inflate view
}
あなたのケースでは、それを行う必要があります。
package com.neutrino.lvt;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class Main extends Activity {
private ListView lv;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
lv = (ListView)findViewById(R.id.lv);
ArrayList<Items> items = new ArrayList<Items>();
items.add(new ItemA("Une"));
items.add(new ItemA("Une3"));
items.add(new ItemA("Une4"));
items.add(new ItemA("Une5"));
items.add(new ItemA("Une6"));
items.add(new ItemA("Une7"));
items.add(new ItemA("Une8"));
items.add(new ItemA("Une9"));
items.add(new ItemA("Une0"));
items.add(new ItemA("Une0-"));
items.add(new ItemB("bbb", "cc1c"));
items.add(new ItemB("bbb3", "c2cc"));
items.add(new ItemB("bbb4", "c2cc"));
items.add(new ItemB("bbb5", "c1cc"));
items.add(new ItemB("bbb6", "cc5c"));
items.add(new ItemB("bbb7", "cc4c"));
items.add(new ItemB("bbb7", "c2cc"));
items.add(new ItemB("bbb8", "c1cc"));
items.add(new ItemB("bbb9", "cc6c"));
items.add(new ItemB("bbb0", "cc8c"));
items.add(new ItemB("bbb0", "cc0c"));
items.add(new ItemB("bb3b", "cc6c"));
items.add(new ItemA("Une"));
items.add(new ItemA("Une3"));
items.add(new ItemA("Une4"));
items.add(new ItemA("Une5"));
items.add(new ItemA("Une6"));
items.add(new ItemA("Une7"));
items.add(new ItemA("Une8"));
items.add(new ItemA("Une9"));
items.add(new ItemA("Une0"));
items.add(new ItemA("Une0-"));
items.add(new ItemB("bbb6", "cc5c"));
items.add(new ItemB("bbb7", "cc4c"));
items.add(new ItemB("bbb7", "c2cc"));
items.add(new ItemB("bbb8", "c1cc"));
items.add(new ItemB("bbb9", "cc6c"));
items.add(new ItemB("bbb0", "cc8c"));
items.add(new ItemB("bbb0", "cc0c"));
items.add(new ItemB("bb3b", "cc6c"));
SpecialAdapter b = new SpecialAdapter(this, items);
lv.setAdapter(b);
}
private class SpecialAdapter extends BaseAdapter{
List<Items> list;
Context context;
public SpecialAdapter(Context context, List<Items> list) {
this.list = list;
this.context = context;
}
public Context getContext(){
return this.context;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Items getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return list.get(position).hashCode();
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
Items b = getItem(position);
if(b instanceof ItemA){
return 0;
}else{
return 1;
}
}
@Override
public View getView(int position, View v, ViewGroup parent) {
Items o = getItem(position);
if(v == null){
LayoutInflater vi = (LayoutInflater)this.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(getItemViewType(position) == 0){
v = vi.inflate(
android.R.layout.simple_list_item_multiple_choice,
null
);
Log.i(this.getClass().getName(),
"Inflate two line"
);
}else{
v = vi.inflate(
android.R.layout.two_line_list_item,
null
);
Log.i(this.getClass().getName(),
"Inflate one line"
);
}
}
switch (getItemViewType(position)) {
case 0:
ItemA oa = (ItemA)o;
((TextView)v.findViewById(android.R.id.text1)).setText(oa.toString());
break;
case 1:
ItemB ob = (ItemB)o;
((TextView)v.findViewById(android.R.id.text1)).setText(ob.toString());
((TextView)v.findViewById(android.R.id.text2)).setText(ob.getClasse());
break;
}
return v;
}
}
private abstract class Items {}
private class ItemA extends Items {
String name;
public ItemA(String name) {
this.name = name;
}
@Override
public String toString() {
return "ItemA: " + name;
}
}
private class ItemB extends Items {
private String name;
private String classe;
public ItemB(String name, String classe) {
this.name = name;
this.classe = classe;
}
public String getClasse(){
return classe;
}
@Override
public String toString() {
return "ItemB: " + name;
}
}
}
私はサンプルを書き、すぐにアップデートを提供しようとします。ビューがリサイクルされると、リサイクルされたビューがItemTypeに対応するかどうかを確認する必要があるため、何かが欠けていると思います。しかし、あなたは間違いなくListViewだけでそれを行うことができます。スクロール可能なものはありません。
Googleの考え方であれば、なぜAndroidを学びたいのですか? –