Android 在 BaseExpandableListAdapter 中隐藏子视图
Android hide childView in BaseExpandableListAdapter
我在我的应用程序中使用 BaseExpandableListAdapter 来显示公司名称列表。当您单击公司名称时,应显示第二个公司分支机构列表。
列表背后的数据结构是一个字符串数组[companies][branches]。
由于数组的选择,我在使用之前必须实例化它。每个公司的分支机构永远不会超过 10 个,所以我将其声明为 arr[companyListLength][10];
问题是当一个公司的分支机构少于10个时,子列表中有空行。
如果行中的数据为空,我尝试将 convertView 设置为空。
我也试过设置 convertView.setVisibility(View.Gone)
但都不起作用。
如果没有数据,如何隐藏子列表中的行?
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]);
if(arrChildelements[groupPosition][childPosition] == null){
Log.e(TAG, "child null");
}else{
Log.e(TAG, "child not null");
}
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;
}
}
在 getChildrenCount(int groupPosition) return 中非空子项的计数,类似于:
@Override
public int getChildrenCount(int groupPosition) {
int count = 0;
for (int i = 0; i < arrChildelements[groupPosition].length; i++)
count += arrChildelements[groupPosition][i] != null ? 1 : 0;
return count;
}
我在我的应用程序中使用 BaseExpandableListAdapter 来显示公司名称列表。当您单击公司名称时,应显示第二个公司分支机构列表。
列表背后的数据结构是一个字符串数组[companies][branches]。
由于数组的选择,我在使用之前必须实例化它。每个公司的分支机构永远不会超过 10 个,所以我将其声明为 arr[companyListLength][10];
问题是当一个公司的分支机构少于10个时,子列表中有空行。
如果行中的数据为空,我尝试将 convertView 设置为空。
我也试过设置 convertView.setVisibility(View.Gone)
但都不起作用。
如果没有数据,如何隐藏子列表中的行?
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]);
if(arrChildelements[groupPosition][childPosition] == null){
Log.e(TAG, "child null");
}else{
Log.e(TAG, "child not null");
}
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;
}
}
在 getChildrenCount(int groupPosition) return 中非空子项的计数,类似于:
@Override
public int getChildrenCount(int groupPosition) {
int count = 0;
for (int i = 0; i < arrChildelements[groupPosition].length; i++)
count += arrChildelements[groupPosition][i] != null ? 1 : 0;
return count;
}