我有一个ParentActivity,它有TextView tvCount,一个片段有可扩展的列表视图。我需要更新可扩展列表视图中选择的子计数。
在我的片段中,我有一个适配器 -
mExpandableListView = (ExpandableListView) view.findViewById(R.id.lvExp);
mAdapter = new ExpandableServiceListViewAdapter(getActivity(),
mGroups);
ExpandableServiceListViewAdapter.java
public class ExpandableServiceListViewAdapter extends BaseExpandableListAdapter {
private static SparseArray<GroupModel> mGroups;
public LayoutInflater mInflater;
public Activity mActivity;
public ExpandableServiceListViewAdapter(Activity act, SparseArray<GroupModel> groups) {
mActivity = act;
this.mGroups = groups;
mInflater = act.getLayoutInflater();
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return mGroups.get(groupPosition).children.get(childPosition);
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return 0;
}
@Override
public View getChildView(final int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
final GroupModel children = (GroupModel) getChild(groupPosition, childPosition);
TextView title, duration, gender, actualprice, finalprice;
final TextView tvCounter, tvTotalCost;
ImageView offericon = null;
final CheckBox checkBox;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.services_item, null);
}
title = (TextView) convertView.findViewById(R.id.tv_title);
duration = (TextView) convertView.findViewById(R.id.tv_duration);
gender = (TextView) convertView.findViewById(R.id.tv_gender);
actualprice = (TextView) convertView.findViewById(R.id.tv_actualprice);
finalprice = (TextView) convertView.findViewById(R.id.tv_finalprice);
offericon = (ImageView) convertView.findViewById(R.id.iv_offer);
checkBox = (CheckBox) convertView.findViewById(R.id.cb_check);
tvTotalCost = (TextView) mActivity.findViewById(R.id.tv_cost);
tvCounter = (TextView) mActivity.findViewById(R.id.tv_counter);
title.setText(children.getmServiceModel().getmServiceTitle());
duration.setText("• " + children.getmServiceModel().getmDuration() + "min");
gender.setText("• " + children.getmServiceModel().getmGender());
actualprice.setText("Rs " + children.getmServiceModel().getmActualPrice());
actualprice.setPaintFlags(actualprice.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
finalprice.setText("\u20B9" + children.getmServiceModel().getmFinalPrice());
if (children.getmServiceModel().getmHasOffer()) {
offericon.setVisibility(View.VISIBLE);
} else {
offericon.setVisibility(View.INVISIBLE);
}
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
checkBox.toggle();
if (checkBox.isChecked()) {
((BaseActivity) mActivity).showToast("Yes");
BusinessActivity.mSelectedMap.put((groupPosition * 1000) + childPosition, children);
} else {
((BaseActivity) mActivity).showToast("No");
BusinessActivity.mSelectedMap.remove((groupPosition * 1000) + childPosition);
}
}
});
return convertView;
}
@Override
public int getChildrenCount(int groupPosition) {
return mGroups.get(groupPosition).children.size();
}
@Override
public Object getGroup(int groupPosition) {
return mGroups.get(groupPosition);
}
@Override
public int getGroupCount() {
return mGroups.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.services_group_header, null);
}
GroupModel group = (GroupModel) getGroup(groupPosition);
TextView title = (TextView) convertView.findViewById(R.id.tv_title);
title.setText(group.getmTitle());
TextView count = (TextView) convertView.findViewById(R.id.tv_count);
count.setText("(" + group.getmCount() + ")");
ImageView iv = (ImageView) convertView.findViewById(R.id.iv_offer);
if (group.getmSubCategory().getmHasOffers())
iv.setVisibility(View.VISIBLE);
else
iv.setVisibility(View.INVISIBLE);
return convertView;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return false;
}
}
这里我试图创建一个选定孩子的地图,我需要将其发送到父活动以更新计数。
BusinessActivity.java是具有片段的父活动。 我在活动中定义了mSelectedMap。我在选择时将条目添加到此地图,并在未选中时删除。
有人可以帮我解决如何从此适配器设置父活动中的计数值。
答案 0 :(得分:2)
有3种方法可以解决您的问题。
答案 1 :(得分:1)
试试这个......
<强> ExpandableServiceListViewAdapter.java 强>
public class ExpandableServiceListViewAdapter extends BaseExpandableListAdapter {
private SparseArray<GroupModel> mGroups;
public LayoutInflater mInflater;
public Activity mActivity;
private OnChildClick onChildClick;
public ExpandableServiceListViewAdapter(Activity act, SparseArray<GroupModel> groups,
OnChildClick onChildClick) {
mActivity = act;
this.mGroups = groups;
this.onChildClick = onChildClick;
mInflater = act.getLayoutInflater();
}
@Override
public View getChildView(final int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
final GroupModel children = (GroupModel) getChild(groupPosition, childPosition);
........
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
checkBox.toggle();
if (checkBox.isChecked()) {
if (null != onChildClick) {
onChildClick.onClick((groupPosition * 1000) + childPosition, children, "Yes");
}
} else {
if (null != onChildClick) {
onChildClick.onClick((groupPosition * 1000) + childPosition, children, "No");
}
}
}
});
return convertView;
}
//other override methods
......
//interface to get selected item
public interface OnChildClick {
void onClick(int position, GroupModel children, String status);
}
}
<强> YourFragment.java 强>
public class YourFragment extends Fragment{
private OnItemSelectedListener mCallback;
private Activity activity;
ExpandableServiceListViewAdapter mAdapter;
ExpandableListView mExpandableListView;
.....
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// This makes sure that the container activity has implemented
// the callback interface. If not, it throws an exception
try {
mCallback = (OnItemSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnItemSelectedListener");
}
}
// interface to update UI changes in BusinessActivity at runtime
public interface OnItemSelectedListener {
void onItemPicked(int position,GroupModel children, String status);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_expandable_list, container, false);
mExpandableListView = (ExpandableListView) view.findViewById(R.id.lvExp);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
mAdapter = new ExpandableServiceListViewAdapter(getActivity(),
mGroup, mOnChildClick);
}
private ExpandableServiceListViewAdapter.OnChildClick mOnChildClick
= new ExpandableServiceListViewAdapter.OnChildClick() {
@Override
public void onClick(int position,GroupModel children, String status) {
// Through interface
try {
((OnItemSelectedListener) activity).onItemPicked(position, children, status);
} catch (Exception cce) {
cce.printStackTrace();
}
//OR accsee directly
if(status.equalsIgnoreCase("Yes")){
((BusinessActivity)activity).mSelectedMap.put(position, children);
}else {
((BusinessActivity)activity).mSelectedMap.remove(position);
}
}
};
}
<强> BusinessActivity.java 强>
public class BusinessActivity extends Activity implements YourFragment.OnItemSelectedListener
{
.....
//Override the method here
@Override
public void onItemPicked(position, children, status)
{
//Do something with the position value passed back
Toast.makeText(activity, "status "+ status, Toast.LENGTH_LONG).show();
//Do something with the position value passed back
Toast.makeText(activity, "status "+ status, Toast.LENGTH_LONG).show();
if(status.equalsIgnoreCase("Yes")){
mSelectedMap.put(position, children)
}else {
mSelectedMap.remove(position);
}
}
.....
}
快乐的编码......