0

別の「マザー」リストビュー内に複数のリストビューをインポートしようとしています。

ListViews が作成されるクラスと、これらのビューを呼び出す Activity クラスがあります。私がなんとかした唯一のことは、「母」を ListPerms@ エントリ(私が推測するオブジェクト)で埋めることです

これが複数のListViewのクラスです

public ListPerms(Context context, String a, int docid) {
    super(context);
    table=a;
    did=docid;
    list= (ListView) findViewById(R.id.specific_perm_list);
    getdata(list,ar_list);
}


private void getdata( ListView list, ArrayList<String> arlist){
    Database openHelper = new Database(getContext());
    myDB = openHelper.getReadableDatabase(); 
    myDB=SQLiteDatabase.openDatabase("data/data/com.example.login2/databases/aeglea", null, SQLiteDatabase.OPEN_READONLY);

    try{fill(list,arlist);}catch(Exception e){Log.e("NAT EXISTANT","THIS->"+e);}

}

private void fill( ListView list, ArrayList<String> arlist){
    Cursor temp = null;
    Cursor buffer = null;
    String type_from_table = null;
    String[] items = null;

    if(table=="med") {type_from_table = "medication";}
    if(table=="test") {type_from_table = "test";}
    if(table=="all") {type_from_table = "allergy";}
    if(table=="proc") {type_from_table = "procedure";}
    if(table=="cond") {type_from_table = "condition";}
    if(table=="vacc") {type_from_table = "vaccine";}


    temp = fetchOption("SELECT * FROM permission WHERE did="+did+" AND type='"+type_from_table+"'");
    if(temp.getCount()>0){

        buffer = fetchOption("SELECT * FROM user_"+table+" WHERE id="+temp.getString(temp.getColumnIndex("fileid")));
        items = new String[] {buffer.getString(buffer.getColumnIndex("name"))};
        arlist.addAll( Arrays.asList(items) ); 
        listAdapter = new ArrayAdapter<String>(getContext(), R.layout.item, arlist); 

        for(int i=1;i<temp.getCount();i++){
            temp.moveToNext();
            buffer = fetchOption("SELECT * FROM user_"+table+" WHERE id="+temp.getString(temp.getColumnIndex("fileid")));
            listAdapter.add(buffer.getString(buffer.getColumnIndex("name"))); 
        }

        list.setAdapter(listAdapter);
    }else{
        items = new String[] { "None."}; 
        arlist.addAll( Arrays.asList(items) ); 
        listAdapter = new ArrayAdapter<String>(getContext(), R.layout.item, arlist);
        list.setAdapter(listAdapter);
    }
}

そして、Activity クラスは、ExpandableListView がある場所 (今) に続きますが、ELV がどのように機能するかを理解するのは本当に初心者です

protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.docp);
        general = (ExpandableListView) findViewById(R.id.Tot_perm_list);
    //random data
}
protected void onResume(){
    super.onResume();

    ListPerms me = new ListPerms(getApplicationContext(),"med",did);
    ListPerms te = new ListPerms(getApplicationContext(),"test",did);
    ListPerms all = new ListPerms(getApplicationContext(),"all",did);
    ListPerms proc = new ListPerms(getApplicationContext(),"proc",did);
    ListPerms cond = new ListPerms(getApplicationContext(),"cond",did);
    ListPerms vacc = new ListPerms(getApplicationContext(),"vacc",did);

    me.setActivated(isChild());
    te.setActivated(isChild());
    all.setActivated(isChild());
    proc.setActivated(isChild());
    cond.setActivated(isChild());
    vacc.setActivated(isChild());
    list.add(me);
    list.add(te);
    list.add(all);
    list.add(proc);
    list.add(cond);
    list.add(vacc);

    general.setAdapter(listAdapter);
    general.addChildrenForAccessibility(list);
    //what do I do
}

ListView{LV,Lv ... } または ExpandableListView{LV, LV ....} の実行方法に関するアドバイス

4

1 に答える 1

1

私の理解では、2 つ以上のリスト ビューを 1 つに組み込むことはお勧めできません。スクロールに問題が発生することは間違いありません (もちろん、いくつかの汚いハックがそれを修正するのに役立ちます)。おそらく、単一のリストよりもパフォーマンスが大幅に低下します。

ExpandableList と ExpandableListAdapter を使用することをお勧めします。リストを 1 つにするには そのアダプターを構成する必要があります。
たとえば、次のようになります。

...
// Your implementation of ExpandableListAdapter

// To store all 'child' adapters, it should be filled by the owner
SparseArray<BaseAdapter> mChildAdapters = new SparseArray<BaseAdapter>();

@Override
public View getChildView(int groupPosition, int childPosition,
        boolean isLastChild, View convertView, ViewGroup parent) {
    final BaseAdapter childAdapter = mChildAdapters.get(groupPosition);
    View view = null;

    if (childAdapter != null) {
        view = childAdapter.getView(childPosition, convertView, parent);
    }

    return view;
}

@Override
public int getChildrenCount(int groupPosition) {
    int childrenCount = 0;
    final BaseAdapter childAdapter = mChildAdapters.get(groupPosition);

    if (childAdapter != null) {
        childrenCount = mChildAdapter.getCount();
    }

    return childrenCount;
}
...

上記のコードは単なるドラフトですが、アイデアが明確になることを願っています。このアプローチで直面する可能性のある唯一のトリック -convertViewある childAdapter で受け取ったものは別のものである可能性があるため、convertView を再利用する前にいくつかの (非常に些細な) チェックを適用する必要があります。

また、展開可能なリストは、(groupView を介して) すべてのリストにヘッダーを提供する優れた可能性を提供します。

于 2012-09-07T05:39:08.263 に答える