我的可展开列表视图存在问题。这是我第一次实施它。所以,这就是问题所在:
我有一个由2个GroupView组成的导航抽屉: - 第一元素 - 第二元素
每个GroupView都由一个数据列表组成。当我单击第二个元素时,可展开列表会显示具有特定图像的数据列表。当我单击第一个元素时,可展开列表会显示一个包含另一个特定图像的数据列表,也可能是它。
这是问题所在:
当我点击第二个元素然后点击第一个元素时,第一个元素中的一些数据会获取第二个元素中列表数据的图像!
我希望当我点击第二个元素时,可扩展列表必须显示一个具有特定图像的数据列表,当我点击第一个元素时,我设置e,可扩展列表必须显示另一个数据列表与我设置的另一个图像。
这是CustomAdapter.class和ViewHolder类中的两个方法:
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(act).inflate(R.layout.custom_list_view, null);
}
TextView transportName = (TextView) convertView.findViewById(R.id.parentTitle);
ImageView transportIcon = (ImageView) convertView.findViewById(R.id.parentIcon);
transportName.setText(getGroup(groupPosition).getServiceName());
transportIcon.setImageResource(getGroup(groupPosition).getIcon());
return convertView;
}
@Override
public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if(convertView == null)
{
convertView = LayoutInflater.from(act).inflate(R.layout.custom_list_view_child, null);
viewHolder = new ViewHolder();
viewHolder.lineName =(TextView) convertView.findViewById(R.id.txtLineNameNavDrawer);
viewHolder.lineDesc = (TextView) convertView.findViewById(R.id.txtLineDescNavDrawer);
viewHolder.check = (CheckBox) convertView.findViewById(R.id.checkLineNavDrawer);
viewHolder.icon = (ImageView) convertView.findViewById(R.id.imgLineNavDrawer);
viewHolder.check.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
int getPosition = (Integer)buttonView.getTag();
getChild(groupPosition, getPosition).setChecked(buttonView.isChecked());
}
});
convertView.setTag(viewHolder);
convertView.setTag(R.id.checkLineNavDrawer, viewHolder.check);
}
else
{
viewHolder = (ViewHolder)convertView.getTag();
}
if(getChild(groupPosition, childPosition).getLinename().equals("Mostra aree di sosta"))
{
viewHolder.icon.setImageResource(R.drawable.parking);
}
else if(getChild(groupPosition, childPosition).getLinename().equals("Mostra bike sharing"))
{
viewHolder.icon.setImageResource(R.drawable.ic_bike);
}
else if(getChild(groupPosition, childPosition).getLinename().equals("Mostra rivenditori"))
{
viewHolder.icon.setImageResource(R.drawable.ic_ticket);
}
viewHolder.check.setTag(childPosition);
viewHolder.lineName.setText(getChild(groupPosition, childPosition).getLinename());
viewHolder.lineDesc.setText(getChild(groupPosition, childPosition).getDescription());
viewHolder.check.setChecked(getChild(groupPosition, childPosition).isChecked());
return convertView;
}
class ViewHolder {
TextView lineName;
TextView lineDesc;
ImageView icon;
CheckBox check;
};
父母的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/GroupLayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/row_highlighter"
android:padding="5dp" >
<ImageView
android:id="@+id/parentIcon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ic_launcher" />
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical" >
<TextView
android:id="@+id/parentTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:text="@string/app_name" />
</RelativeLayout>
</LinearLayout>
孩子的布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ChildLayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="5dp" >
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight=".15"
android:gravity="center"
android:orientation="vertical" >
<ImageView
android:id="@+id/imgLineNavDrawer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/apiedi" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight=".7"
android:orientation="vertical" >
<TextView
android:id="@+id/txtLineNameNavDrawer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Medium Text"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/txtLineDescNavDrawer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Small Text"
android:textAppearance="?android:attr/textAppearanceSmall" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight=".15" >
<CheckBox
android:id="@+id/checkLineNavDrawer"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
屏幕:
第二组视图:http://i60.tinypic.com/ogjius.png
第一组视图:http://i61.tinypic.com/2ajtjdw.png
如果有人可以帮助我,我会很感激。
答案 0 :(得分:1)
您的setOnCheckedChangeListener
存在问题。您只能在convertView == null
时实例化它。这意味着每当convertView != null
重新使用原始setOnCheckedChangeListener
时,可能会或可能不会使用相同的组位置编号。
相反,始终设置新的setOnCheckedChangeListener
。 converView是否为null。就像使用viewHolder.icon.setImageResource
调用一样。
您还在convertView的标签中存储了两件事。使用ViewHolder时,无需将R.id.checkLineNavDrawer直接存储为标记
知道了。你需要一个其他的图像。因此,如果getLinename()。equals(&#34; blah&#34;)都不起作用,您可以将其设置为行走人图像。