我需要在我的應用程序中使用可擴展列表視圖,其中每個組都有不同的表格佈局。我想爲表中的每一行設置onClick Listener。Expandable ListView中不同組的不同佈局不同的佈局
如何在不同的可擴展列表視圖中設置不同的佈局?
或者是有可能通過動態地添加行(擴大),並刪除他們 (隱藏)做擴展列表視圖的相同功能與 表佈局。
我需要在我的應用程序中使用可擴展列表視圖,其中每個組都有不同的表格佈局。我想爲表中的每一行設置onClick Listener。Expandable ListView中不同組的不同佈局不同的佈局
如何在不同的可擴展列表視圖中設置不同的佈局?
或者是有可能通過動態地添加行(擴大),並刪除他們 (隱藏)做擴展列表視圖的相同功能與 表佈局。
您可以根據例如BaseExpandableListAdapter
創建您自己的ExpandableListAdapter
。接下來,您應該重寫getChildView
方法,以便期望的孩子將擁有所需的佈局。這裏有一個簡單的例子:
public class MyExpandableListAdapter extends BaseExpandableListAdapter {
public ArrayList<String> groupItem;
public ArrayList<Object> childItem;
public LayoutInflater minflater;
public MyExpandableListAdapter(ArrayList<String> grList,
ArrayList<Object> childItem, Context context) {
groupItem = grList;
this.childItem = childItem;
this.context = context;
minflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getChildView(int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
if (convertView == null) {
if (groupItem.get(groupPosition).equals("desired_group_name")) {
convertView = minflater.inflate(R.layout.desired_layout, null);
} else {
convertView = minflater.inflate(R.layout.other_layout, null);
}
}
}
}
如果這個答案是不清楚,我可以爲您提供全類,但它的實例很容易找到在網絡上。
這是我的項目中的全班同學。我知道convertView應該是可重用的,但是當列表被摺疊然後重新打開時,我認爲Views的順序有問題。我只有幾個元素,所以從性能角度來看這不是問題。
package pl.psnc.iip.hne.android.hneclient.adapter;
import java.util.ArrayList;
import pl.psnc.iip.hne.android.hneclient.R;
import pl.psnc.iip.hne.android.hneclient.json.Device;
import pl.psnc.iip.hne.android.hneclient.json.Devices;
import pl.psnc.iip.hne.android.hneclient.listeners.ImageViewRegisteredListener;
import pl.psnc.iip.hne.android.hneclient.utility.ConnectionUtils;
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.CheckedTextView;
import android.widget.ImageView;
import android.widget.TextView;
public class DeviceExpandableListAdapter extends BaseExpandableListAdapter {
public ArrayList<String> groupItem;
public ArrayList<Device> tempChild;
public ArrayList<Object> childItem;
public LayoutInflater minflater;
ArrayList<ImageViewRegisteredListener> ivrListeners = null;
public Activity activity;
public Context context;
int idIterator;
public void addImageViewRegisteredListener(
ImageViewRegisteredListener listener) {
if (!ivrListeners.contains(listener)) {
ivrListeners.add(listener);
}
}
public void removeImageViewRegisteredListener(
ImageViewRegisteredListener listener) {
if (ivrListeners.contains(listener)) {
ivrListeners.remove(listener);
}
}
public DeviceExpandableListAdapter(ArrayList<String> grList,
ArrayList<Object> childItem, Context context) {
groupItem = grList;
idIterator = 0;
ivrListeners = new ArrayList<ImageViewRegisteredListener>();
this.childItem = childItem;
this.context = context;
minflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public void setInflater(LayoutInflater mInflater, Activity act) {
this.minflater = mInflater;
activity = act;
}
public int findAppropriateImageForDevice(String type) {
int id = -1;
if (type.equals(Devices.PLOGG)) {
id = R.drawable.plogg;
} else if (type.equals(Devices.RFID)) {
id = R.drawable.rfid;
} else if (type.equals(Devices.BARRIER)) {
// id = -1;
} else if (type.equals(Devices.TEMPLIGHT)) {
// id = -1;
}
return id;
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return (Device) ((ArrayList<Device>) childItem.get(groupPosition))
.get(childPosition);
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return 0;
}
@Override
public View getChildView(int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
tempChild = (ArrayList<Device>) childItem.get(groupPosition);
Device device = tempChild.get(childPosition);
Log.i(this.getClass().getName(), device.getIp());
if (groupItem.get(groupPosition).equals(Devices.PLOGG)) {
int newId = -1;
Integer oldId = ConnectionUtils.getInstance().getPowerIndicatorHT()
.get(device.getIp());
if (oldId != null) {
newId = oldId;
} else {
++idIterator;
newId = idIterator;
ConnectionUtils.getInstance().getPowerIndicatorHT()
.put(device.getIp(), newId);
}
convertView = minflater.inflate(R.layout.plogg_item, null);
ImageView powerIndicator = (ImageView) convertView
.findViewById(R.id.powerIndicator);
powerIndicator.setId(newId);
Integer foundId = ConnectionUtils.getInstance()
.getPowerIndicatorHT().get(device.getIp());
if (foundId != null) {
for (ImageViewRegisteredListener listener : ivrListeners) {
listener.imageViewRegistered(convertView, foundId,
device.getIp());
}
}
Log.i(DeviceExpandableListAdapter.class.getName(), "newId: "
+ newId);
} else {
convertView = minflater.inflate(R.layout.device_item, null);
}
TextView textTop = null;
textTop = (TextView) convertView.findViewById(R.id.toptext);
TextView textBottom = null;
textBottom = (TextView) convertView.findViewById(R.id.bottomtext);
textTop.setText(device.getIp());
textBottom.setText(device.getDescription());
int id = findAppropriateImageForDevice(device.getType());
ImageView image = (ImageView) convertView.findViewById(R.id.icon);
if (id != -1) {
image.setImageResource(id);
} else {
image.setImageResource(R.drawable.ic_launcher);
}
return convertView;
}
@Override
public int getChildrenCount(int groupPosition) {
return ((ArrayList<String>) childItem.get(groupPosition)).size();
}
@Override
public Object getGroup(int groupPosition) {
return null;
}
@Override
public int getGroupCount() {
return groupItem.size();
}
@Override
public void onGroupCollapsed(int groupPosition) {
super.onGroupCollapsed(groupPosition);
}
@Override
public void onGroupExpanded(int groupPosition) {
super.onGroupExpanded(groupPosition);
}
@Override
public long getGroupId(int groupPosition) {
return 0;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = minflater.inflate(R.layout.group_row, null);
}
CheckedTextView ctv = (CheckedTextView) convertView
.findViewById(R.id.textView1);
ctv.setText(groupItem.get(groupPosition));
ctv.setChecked(isExpanded);
return convertView;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
下面是它的實際樣子:
你能否給我提供全班?我真的很沮喪這樣做。 –
你找到這個.. – Kishore
沒有,我去替代方法的任何解決方案。 –
你能告訴我你是怎麼做到的嗎? – Kishore