我想在父级和子级布局中使用父级XML和子级XML的自定义ExpandableListView
。Android可扩展列表
我的数据将是服务器响应。所以我最好希望以父列表布局或子布局的数组列表或散列表的形式存在数据。
我附上了我想要的图像。
是否有任何方法通过任何+或 - UI表示法来更改可展开列表箭头图像(默认),如下所示。
请提出这一具体情况的教程或代码的逻辑。
我想在父级和子级布局中使用父级XML和子级XML的自定义ExpandableListView
。Android可扩展列表
我的数据将是服务器响应。所以我最好希望以父列表布局或子布局的数组列表或散列表的形式存在数据。
我附上了我想要的图像。
是否有任何方法通过任何+或 - UI表示法来更改可展开列表箭头图像(默认),如下所示。
请提出这一具体情况的教程或代码的逻辑。
在此期间 我已经创建了一个selector.xml为:
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="schemas.android.com/apk/res/android" >
<item
android:drawable="@drawable/friend_small"
android:state_expanded="true"/>
<item android:drawable="@drawable/place_small"/>
</selector>
和XML在android:groupIndicator="@drawable/selector"
给出 - friend_small,并把小是我的扩大图像和折叠状态
您可以通过调用setGroupIndicator
扩展列表能够显示每个项目旁边的指示灯来显示该项目的当前状态(状态通常是扩大集团之一,倒塌组,儿童更改指标,或最后一个孩子)。使用setChildIndicator(Drawable)或setGroupIndicator(Drawable)(或相应的XML属性)来设置这些指标(请参阅每种方法的文档以查看每个Drawable可以具有的附加状态)。
此外,您还需要自己实施ExpandableListAdapter。对于父母和孩子都有可能夸大自己的观点。
一个后R & D over expandable List我发现可扩展列表视图是由Android提供的两级树视图。
此视图包含两种类别。
第一类是集团元素和第二个是儿童元素,也称为父和子元素。
本示例的主要目的是定制可展开列表视图,如问题所示。
我已经介绍了一些关于在我的经历中遇到的可扩展列表视图的重要主题。
下面的代码是main.xml包含可展开的列表视图。 main.xml中
<!--?xml version="1.0" encoding="UTF-8"?-->
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">
<expandablelistview android:id="@+id/android:list" android:layout_width="fill_parent" android:layout_height="fill_parent" android:groupindicator="@drawable/group_indicator.xml">
<textview android:id="@+id/android:empty" android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="@string/main_no_items">
</textview></expandablelistview></linearlayout>
的group_row.xml是如下包含用于扩展列表组视图structure.group_row.xml 布局?
<textview android:id="@+id/tvGroupName" android:layout_width="wrap_content" android:layout_height="40dip" android:textsize="16sp" android:textstyle="bold" android:paddingleft="30dip" android:gravity="center_vertical">
child_row.xml这是包含用于扩展列表视图组结构的布局。 child_row.xml
<!--?xml version="1.0" encoding="utf-8"?-->
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="40dip" android:gravity="center_vertical">
<textview android:id="@+id/tvPlayerName" android:paddingleft="50dip" android:textsize="14sp" android:layout_width="wrap_content" android:layout_height="30dip" android:gravity="center_vertical">
</textview></linearlayout>
首先读出的可膨胀的列表视图从XML到活动等级基准。
public class ExpList extends ExpandableListActivity
{
/**
* strings for group elements
*/
static final String arrGroupelements[] =
{
"India",
"Australia",
"England",
"South Africa"
};
/**
* strings for child elements
*/
static final String arrChildelements[][] =
{
{
"Sachin Tendulkar",
"Raina",
"Dhoni",
"Yuvi"
},
{
"Ponting",
"Adam Gilchrist",
"Michael Clarke"
},
{
"Andrew Strauss",
"kevin Peterson",
"Nasser Hussain"
},
{
"Graeme Smith",
"AB de villiers",
"Jacques Kallis"
}
};
DisplayMetrics metrics;
int width;
ExpandableListView expList;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
expList = getExpandableListView();
metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
width = metrics.widthPixels;
//this code for adjusting the group indicator into right side of the view
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN_MR2) {
expList.setIndicatorBounds(width - GetDipsFromPixel(50), width - GetDipsFromPixel(10));
} else {
expList.setIndicatorBoundsRelative(width - GetDipsFromPixel(50), width - GetDipsFromPixel(10));
}
expList.setAdapter(new ExpAdapter(this));
expList.setOnGroupExpandListener(new OnGroupExpandListener()
{
@Override
public void onGroupExpand(int groupPosition)
{
Log.e("onGroupExpand", "OK");
}
});
expList.setOnGroupCollapseListener(new OnGroupCollapseListener()
{
@Override
public void onGroupCollapse(int groupPosition)
{
Log.e("onGroupCollapse", "OK");
}
});
expList.setOnChildClickListener(new OnChildClickListener()
{
@Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
Log.e("OnChildClickListener", "OK");
return false;
}
});
}
public int GetDipsFromPixel(float pixels)
{
// Get the screen's density scale
final float scale = getResources().getDisplayMetrics().density;
// Convert the dps to pixels, based on density scale
return (int) (pixels * scale + 0.5f);
}
}
对于自定义Exp Listview主要的东西是适配器。 Android提供了BaseExpandableListAdapter来自定义视图。波纹管是适配器设计的代码。
这是用于构建组和子元素的可展开列表视图的适配器。
public class ExpAdapter extends BaseExpandableListAdapter {
private Context myContext;
public ExpAdapter(Context context) {
myContext = context;
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return null;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return 0;
}
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) myContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.child_row, null);
}
TextView tvPlayerName = (TextView) convertView.findViewById(R.id.tvPlayerName);
tvPlayerName.setText(arrChildelements[groupPosition][childPosition]);
return convertView;
}
@Override
public int getChildrenCount(int groupPosition) {
return arrChildelements[groupPosition].length;
}
@Override
public Object getGroup(int groupPosition) {
return null;
}
@Override
public int getGroupCount() {
return arrGroupelements.length;
}
@Override
public long getGroupId(int groupPosition) {
return 0;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) myContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.group_row, null);
}
TextView tvGroupName = (TextView) convertView.findViewById(R.id.tvGroupName);
tvGroupName.setText(arrGroupelements[groupPosition]);
return convertView;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
group_indicator.xml 这是更改默认指标图像的代码。
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_expanded="true" android:drawable="@drawable/friend_small" />
<item android:drawable="@drawable/place_small" />
</selector>
经过研发我已经实现了一个代码,使用父母和孩子布局的自定义可扩展列表作为我的group_row。 XML和child_row。 XML。 –
此外,,对齐默认的崩溃和展开图像正确...按照我的布局中所需... –
ExpandableListView不能有子视图(在xml中)。 – ddmps