1

我想用複選框來理想地設置Expanded List View,這是設置的一些東西。擴展列表視圖不起作用

但由於某種原因,它不適合我。

我已經嘗試了很多不同的教程,並花了很多時間。但他們似乎都以同樣的方式結束。它顯示在我的活動上,但不會擴展或崩潰。

,這裏是我的代碼的Settings.XML:

<ExpandableListView 
android:id="@+id/lvExp" 
android:layout_height="match_parent" 
android:layout_width="match_parent"/> 

這裏是我的父XML代碼:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical" 
android:padding="8dp" 
android:background="#000000"> 


<TextView 
    android:id="@+id/lblListHeader" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:paddingLeft="? 
    android:attr/expandableListPreferredItemPaddingLeft" 
    android:textSize="17dp" 
    android:textColor="#f9f93d" /> 

</LinearLayout> 

這裏是我的孩子XML代碼:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="55dip" 
android:orientation="vertical" > 

<TextView 
    android:id="@+id/lblListItem" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textSize="17dip" 
    android:paddingTop="5dp" 
    android:paddingBottom="5dp" 
    android:paddingLeft="? 
    android:attr/expandableListPreferredChildPaddingLeft" /> 

</LinearLayout> 

這裏是我的擴展列表適配器

package com.example.edonfreiner.siddur; 

import java.util.HashMap; 
import java.util.List; 

import android.content.Context; 
import android.graphics.Typeface; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseExpandableListAdapter; 
import android.widget.TextView; 

public class ExpandableListAdapter extends BaseExpandableListAdapter { 

private Context _context; 
private List<String> _listDataHeader; // header titles 
// child data in format of header title, child title 
private HashMap<String, List<String>> _listDataChild; 

public ExpandableListAdapter(Context context, List<String> 
listDataHeader, 
          HashMap<String, List<String>> 
listChildData) { 
    this._context = context; 
    this._listDataHeader = listDataHeader; 
    this._listDataChild = listChildData; 
} 

@Override 
public Object getChild(int groupPosition, int childPosititon) { 
    return 
this._listDataChild.get(this._listDataHeader.get(groupPosition)) 
      .get(childPosititon); 
} 

@Override 
public long getChildId(int groupPosition, int childPosition) { 
    return childPosition; 
} 

@Override 
public View getChildView(int groupPosition, final int childPosition, 
         boolean isLastChild, View convertView, 
ViewGroup parent) { 

    final String childText = (String) getChild(groupPosition, 
childPosition); 

    if (convertView == null) { 
     LayoutInflater infalInflater = (LayoutInflater) this._context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = infalInflater.inflate(R.layout.list_item, null); 
    } 

    TextView txtListChild = (TextView) convertView 
      .findViewById(R.id.lblListItem); 

    txtListChild.setText(childText); 
    return convertView; 
} 

@Override 
public int getChildrenCount(int groupPosition) { 
    return 
this._listDataChild.get(this._listDataHeader.get(groupPosition)) 
      .size(); 
} 

@Override 
public Object getGroup(int groupPosition) { 
    return this._listDataHeader.get(groupPosition); 
} 

@Override 
public int getGroupCount() { 
    return this._listDataHeader.size(); 
} 

@Override 
public long getGroupId(int groupPosition) { 
    return groupPosition; 
} 

@Override 
public View getGroupView(int groupPosition, boolean isExpanded, 
         View convertView, ViewGroup parent) { 
    String headerTitle = (String) getGroup(groupPosition); 
    if (convertView == null) { 
     LayoutInflater infalInflater = (LayoutInflater) this._context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = infalInflater.inflate(R.layout.list_group, null); 
    } 

    TextView lblListHeader = (TextView) convertView 
      .findViewById(R.id.lblListHeader); 
    lblListHeader.setTypeface(null, Typeface.BOLD); 
    lblListHeader.setText(headerTitle); 

    return convertView; 
} 

@Override 
public boolean hasStableIds() { 
    return false; 
} 

@Override 
public boolean isChildSelectable(int groupPosition, int childPosition) 
{ 
    return true; 
} 
} 

到目前爲止,我甚至可以讓這個工作,更不用說把複選框放在裏面,我希望更容易。

enter image description here

+0

那麼,您是否只在列表中看到父項? getChildrenCount()的大小是多少?此外,我不明白在哪裏的複選框。 – Laura

+0

是的我只看到列表中的父項目,我已經上傳了一張圖片以便您可以看到,但請注意,複選框不是可擴展列表視圖的一部分,只是其後的xml複選框。我還沒有合併複選框。我想讓你知道整個項目,以便你能更好地幫助我,或者我可以通過不同的方式來實現這個想法。 –

+0

感謝您的幫助,問題是視圖太小,一切都很好,除非你看不到它。我也設法得到那裏的複選框,但是我不能讓複選框偵聽器工作。這是爲什麼?另外,有什麼方法可以在某些事物打開並關閉時調整視圖的大小?謝謝 –

回答

0

我已經意識到,當一個ExpandableListView的孩子可獲得焦點(如按鈕,複選框),你需要設置(您的孩子元素):

android:focusable="false" 

這是因爲這些子元素從你的觸摸中竊取焦點,這是爲了擴大列表視圖。

這原本是我對Android ExpandableListView not expanding這個問題的回答,這似乎幫助了幾個人。

EDIT Focusable屬性表示插件可以接收焦點是從點擊不同(等接收哪些按鈕,複選框)

+0

感謝您的幫助@ucsunil,但這並沒有把戲。另外,我想我會需要將它設置爲true時,我想將複選框放在那裏 –

+0

您是否嘗試過在TextView上設置它?我相信TextView是可調焦的(因爲如果使用不同於接收點擊的鍵盤,可以獲得焦點)。 – ucsunil

+0

感謝您的幫助,問題是視圖太小,一切都很好,除非你看不到它。我也設法得到那裏的複選框,但是我不能讓複選框偵聽器工作。這是爲什麼?另外,有什麼方法可以在某些事物打開並關閉時調整視圖的大小?謝謝 –

0

我認爲這可能是2層的問題之一:或者是getChildrenCount方法返回0,無論哪種觀點都越來越關注。嘗試在父級XML的容器佈局中使用此代碼:

android:descendantFocusability="blocksDescendants" 
+0

嘿,我記錄了這個:'getChildrenCount',它返回7.但是,謝謝 –

+0

感謝您的幫助,問題是視圖太小一切都很好,除非你看不到它。我也設法得到那裏的複選框,但是我不能讓複選框偵聽器工作。這是爲什麼?另外,有什麼方法可以在某些事物打開並關閉時調整視圖的大小?謝謝 –