适配器不调用getChildView android
问题描述:
我正在试图开发3级下可扩展列表视图,但膨胀后,第一级项目不能看到第一级的孩子卡住了。适配器不调用getChildView android
只显示父视图不显示二级视图,甚至没有发生任何点击事件。
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseExpandableListAdapter;
import android.widget.Button;
import android.widget.ExpandableListView;
import android.widget.LinearLayout.LayoutParams;
import android.widget.ListView;
import android.widget.TextView;
import com.ofd.R;
import com.ofd.base.BaseFragment;
import com.ofd.utils.Utils;
import static com.ofd.utils.Constants.LEFT_ICON_PREVIOUS;
import static com.ofd.utils.Constants.NONE;
/*
* This fragment is used to show the Agencies expanable list
*
* @author girish.sharma
*
*/
public class AgenciesFragment extends BaseFragment implements OnItemClickListener {
private View view;
private Button mSubmit;
public static int Service = -1;
private Context mContext;
ExpandableListView explvlist;
private ViewHolder mViewHolder;
private LayoutInflater mInflater;
/**
* This is the function used to initialize the view of the fragment
***/
@Override
protected View initUI(LayoutInflater inflater, ViewGroup container) {
if (view == null) {
view = inflater.inflate(R.layout.agencies_fragment, null);
mContext = getActivity();
mInflater = LayoutInflater.from(mContext);
explvlist = (ExpandableListView) view.findViewById(R.id.ParentLevel);
explvlist.setAdapter(new ParentLevel());
explvlist.setOnItemClickListener(this);
}
return view;
}
@Override
public void onItemClick(AdapterView<?> adapterView, View arg1, int position, long arg3) {
super.onItemClick(adapterView, arg1, position, arg3);
Utils.showToast(mContext, "Click");
}
public class ParentLevel extends BaseExpandableListAdapter {
@Override
public Object getChild(int arg0, int arg1) {
return arg1;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
CustExpListview SecondLevelexplv = new CustExpListview(mContext);
SecondLevelexplv.setAdapter(new SecondLevelAdapter());
SecondLevelexplv.setGroupIndicator(null);
return SecondLevelexplv;
}
@Override
public int getChildrenCount(int groupPosition) {
return 3;
}
@Override
public Object getGroup(int groupPosition) {
return groupPosition;
}
@Override
public int getGroupCount() {
return 5;
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
mViewHolder = new ViewHolder();
LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService
(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.row_first, parent, false);
// Inflate the layout that you want for each row
/*convertView = mInflater.inflate(R.layout.row_first, parent, false);*/
/*mViewHolder.txtViewTitle = (TextView) view.findViewById(R.id.txtViewTitleMain);*/
// Add a reference in ViewHolder for your Button, find it like the TextViews and define its OnClickListener here too, eventually...
/*view.setTag(mViewHolder);*/
} /*else
mViewHolder = (ViewHolder) view.getTag();*/
mViewHolder.txtViewTitle = (TextView) view.findViewById(R.id.txtViewTitleMain);
mViewHolder.txtViewTitle.setText("FirstLevel");
/*TextView tv = new TextView(mContext);
tv.setText("->FirstLevel");
tv.setBackgroundColor(Color.WHITE);
tv.setPadding(10, 7, 7, 7);*/
return view;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
public class CustExpListview extends ExpandableListView {
int intGroupPosition, intChildPosition, intGroupid;
public CustExpListview(Context context) {
super(context);
}
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
widthMeasureSpec = MeasureSpec.makeMeasureSpec(960, MeasureSpec.AT_MOST);
heightMeasureSpec = MeasureSpec.makeMeasureSpec(600, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
public class SecondLevelAdapter extends BaseExpandableListAdapter {
@Override
public Object getChild(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
TextView tv = new TextView(mContext);
tv.setText("child");
tv.setPadding(15, 5, 5, 5);
tv.setBackgroundColor(Color.GRAY);
tv.setLayoutParams(new ListView.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
return tv;
}
@Override
public int getChildrenCount(int groupPosition) {
return 5;
}
@Override
public Object getGroup(int groupPosition) {
return groupPosition;
}
@Override
public int getGroupCount() {
return 1;
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
TextView tv = new TextView(mContext);
tv.setText("-->Second Level");
tv.setPadding(12, 7, 7, 7);
tv.setBackgroundColor(Color.RED);
return tv;
}
@Override
public boolean hasStableIds() {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return true;
}
}
/**
* Here change the header text
***/
@Override
public void onResume() {
TitleBarFragment fragment = (TitleBarFragment) getFragment(R.id.activity_fragment_launcher_header);
if (fragment != null) {
fragment.setTitleBarVisibility(true);
fragment.setHeaderTitleAndSideIcon(getActivity().getResources()
.getString(R.string.fragment_agencies_header),
LEFT_ICON_PREVIOUS, NONE);
}
super.onResume();
}
private class ViewHolder {
private TextView txtViewTitle;
}
}
答
我花了几个小时试图找到同样的问题,才意识到这是一件死在我身边很简单:
- 出于某种原因(现在我将调试它) - 的groupview做触摸时不会展开。
- 由于组视图没有展开,所以没有理由浪费CPU周期来获取不会显示的视图。
- 适配器中与孩子有关的所有方法都不会被调用。
尝试调用explvlist.expandGroup(0 ... n)手动将其展开并查看它是否在适配器中调用与子相关的方法。
你没有很好地实现查看持有者模式 –
是的,它只是一个运行时代码尝试多个事情,使其工作。 –
如果我仅保留Item中的textview,则代码工作正常。 但是我需要在列表项中填充texview和复选框。 –