可扩展列表视图的组元素上的多个点击事件
Multiple click events on expandablelistview's group element
我有两个关于 groupView 上的 expandablelistview 单击事件的问题(不是 child)
当我的 GroupView 中有 child 时,我可以使用下面的代码片段
获取 groupPosition
expandableListView.setOnGroupClickListener(新ExpandableListView.OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
Log.d("Clicked on item: ", ""+groupPosition);
return false;
}
});
但是当我没有任何 child 时,不幸的是 'MyApp' 在鼠标单击时停止了 。在这种情况下,如何获取groupPosition?
我的可扩展列表视图的组视图布局中有两个按钮。现在我需要为两个按钮注册两个不同的点击事件。这个groupView也没有child。我搜索得很彻底,但我对此一无所知。
<LinearLayout
android:layout_below="@id/qtd_prc_cont"
android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center">
<Textview
android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/group_text" android:text="Group 1" />
<Button
android:id="@+id/btn_reject"
android:layout_width="90dp" android:layout_height="30dp" android:text="Reject" android:textAllCaps="false" android:background="@drawable/reject_button_styles"
android:layout_marginRight="60dp" android:textColor="#a1a2a1" android:textSize="13dp"/>
<Button
android:id="@+id/btn_accept"
android:layout_width="90dp" android:layout_height="30dp" android:text="Accept" android:textAllCaps="false" android:background="@drawable/button_radius"
android:textColor="@color/colorWhite" android:textSize="13dp"/>
</LinearLayout>
这是我的适配器 class:
public class OfferedTrucksAdapter extends BaseExpandableListAdapter {
private Context context;
private ArrayList<QuotedListGroup> groups;
public OfferedTrucksAdapter(Context context, ArrayList<QuotedListGroup> groups) {
this.context = context;
this.groups = groups;
}
@Override
public Object getChild(int groupPosition, int childPosition) {
ArrayList<QuotedListItem> chList = groups.get(groupPosition).getItems();
return chList.get(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) {
QuotedListItem child = (QuotedListItem) getChild(groupPosition, childPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) context
.getSystemService(context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.activity_quoted_list_item, null);
}
TextView container_label = (TextView) convertView.findViewById(R.id.container);
container_label.setText(child.getContainer());
TextView truck_number = (TextView) convertView.findViewById(R.id.truck_number);
truck_number.setText(child.getTruckNumber().toString());
TextView truck_weight = (TextView) convertView.findViewById(R.id.truck_weight);
truck_weight.setText(child.getTruckWeight().toString());
return convertView;
}
@Override
public int getChildrenCount(int groupPosition) {
ArrayList<QuotedListItem> chList = groups.get(groupPosition).getItems();
return chList.size();
}
@Override
public Object getGroup(int groupPosition) {
return groups.get(groupPosition);
}
@Override
public int getGroupCount() {
return groups.size();
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
QuotedListGroup group = (QuotedListGroup) getGroup(groupPosition);
if (convertView == null) {
LayoutInflater inf = (LayoutInflater) context
.getSystemService(context.LAYOUT_INFLATER_SERVICE);
convertView = inf.inflate(R.layout.activity_offered_trucks_group, null);
}
if(groupPosition%2 == 0) {
convertView.findViewById(R.id.offered_trucks_group).setVisibility(View.VISIBLE);
convertView.findViewById(R.id.offered_price_group).setVisibility(View.GONE);
TextView destination = (TextView) convertView.findViewById(R.id.offered_destination);
destination.setText(group.getDestination());
TextView trucks = (TextView) convertView.findViewById(R.id.offered_trucks);
trucks.setText(group.getTrucks() + "");
TextView date_label = (TextView) convertView.findViewById(R.id.offered_date_label);
date_label.setText(group.getDateLabel().toString());
TextView material = (TextView) convertView.findViewById(R.id.offered_material);
material.setText(group.getMaterial().toString());
TruckaroIconView see_hide_icon = (TruckaroIconView) convertView.findViewById(R.id.offered_see_hide_icon);
TextView see_hide_label = (TextView) convertView.findViewById(R.id.offered_see_hide_label);
if(isExpanded) {
see_hide_label.setText("Hide Trucks");
see_hide_icon.setRotation(180);
} else {
see_hide_label.setText("See Trucks");
see_hide_icon.setRotation(0);
}
} else {
convertView.findViewById(R.id.offered_trucks_group).setVisibility(View.GONE);
convertView.findViewById(R.id.offered_price_group).setVisibility(View.VISIBLE);
TextView offeredPrice = (TextView) convertView.findViewById(R.id.offered_price);
offeredPrice.setText(group.getOfferedPrice());
TextView quotedPrice = (TextView) convertView.findViewById(R.id.quoted_price);
quotedPrice.setText(group.getQuotedPrice());
}
return convertView;
}
protected static class RowViewHolder {
public Button buttonReject, buttonAccept;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
基于 accept/reject 按钮点击,我需要通过 intent 将 Textview 的数据传递给下一个 activity。
这是我的可扩展列表视图的样子:
在上图中,有四个列表项。第一和第三有children,但第二和第四没有child。当我点击第二个元素接受按钮时,我需要将第一个元素数据传递给下一个 activity。我无法在这些按钮上设置点击事件。
请帮我解决这个问题。
提前致谢。
好的。如果我正确理解您的问题,您的目标是传递上部项目的一个元素(在您的屏幕截图中,如果单击 Accept 按钮,上部项目的值将通过 intent
.
检索并传递给另一个 activity
这是我得到的:
@Override
public View getGroupView(final int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
QuotedListGroup group = (QuotedListGroup) getGroup(groupPosition);
if (convertView == null) {
LayoutInflater inf = (LayoutInflater) context
.getSystemService(context.LAYOUT_INFLATER_SERVICE);
convertView = inf.inflate(R.layout.activity_offered_trucks_group, null);
}
if (groupPosition % 2 == 0) {
// Removed some code here.
} else {
convertView.findViewById(R.id.offered_trucks_group).setVisibility(View.GONE);
convertView.findViewById(R.id.offered_price_group).setVisibility(View.VISIBLE);
TextView offeredPrice = (TextView) convertView.findViewById(R.id.offered_price);
offeredPrice.setText(group.getOfferedPrice());
TextView quotedPrice = (TextView) convertView.findViewById(R.id.quoted_price);
quotedPrice.setText(group.getQuotedPrice());
// Added code here ----
// Initialize the buttons.
Button btnAccept = (Button) convertView.findViewById( < insert_btn_id_here >);
Button btnReject = (Button) convertView.findViewById( < insert_btn_id_here >);
// Set onClickListeners for the buttons.
btnAccept.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/*
Modify with the object you have, then pass the group position - 1
(double check this, you just need to pass the position of the upper item).
*/
Object groupObject = getGroup(groupPosition - 1);
/*
Get the value from the groupObject that you want to include in the intent.
NOTE: I'm just using some sample codes, modify it to what you need.
*/
String sampleStr = groupObject.destination.getText().toString();
/*
Intent stuff, I think you know this already.
*/
Intent intent = new Intent(context, SampleActivity.class);
intent.putExtra("SAMPLE_KEY", sampleStr);
context.startActivity(intent);
}
});
btnReject.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// your code for reject button here.
}
});
// Until here ----
}
return convertView;
}
我只是在 else
语句中为您的按钮(接受、拒绝)添加了监听器。您需要将其修改为您需要的内容,因为我看不到您的其余代码。如果您有任何疑问,请告诉我。干杯! :D
我有两个关于 groupView 上的 expandablelistview 单击事件的问题(不是 child)
当我的 GroupView 中有 child 时,我可以使用下面的代码片段
获取 groupPositionexpandableListView.setOnGroupClickListener(新ExpandableListView.OnGroupClickListener() {
@Override public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { Log.d("Clicked on item: ", ""+groupPosition); return false; } });
但是当我没有任何 child 时,不幸的是 'MyApp' 在鼠标单击时停止了 。在这种情况下,如何获取groupPosition?
我的可扩展列表视图的组视图布局中有两个按钮。现在我需要为两个按钮注册两个不同的点击事件。这个groupView也没有child。我搜索得很彻底,但我对此一无所知。
<LinearLayout android:layout_below="@id/qtd_prc_cont" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center"> <Textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/group_text" android:text="Group 1" /> <Button android:id="@+id/btn_reject" android:layout_width="90dp" android:layout_height="30dp" android:text="Reject" android:textAllCaps="false" android:background="@drawable/reject_button_styles" android:layout_marginRight="60dp" android:textColor="#a1a2a1" android:textSize="13dp"/> <Button android:id="@+id/btn_accept" android:layout_width="90dp" android:layout_height="30dp" android:text="Accept" android:textAllCaps="false" android:background="@drawable/button_radius" android:textColor="@color/colorWhite" android:textSize="13dp"/> </LinearLayout>
这是我的适配器 class:
public class OfferedTrucksAdapter extends BaseExpandableListAdapter {
private Context context;
private ArrayList<QuotedListGroup> groups;
public OfferedTrucksAdapter(Context context, ArrayList<QuotedListGroup> groups) {
this.context = context;
this.groups = groups;
}
@Override
public Object getChild(int groupPosition, int childPosition) {
ArrayList<QuotedListItem> chList = groups.get(groupPosition).getItems();
return chList.get(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) {
QuotedListItem child = (QuotedListItem) getChild(groupPosition, childPosition);
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater) context
.getSystemService(context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.activity_quoted_list_item, null);
}
TextView container_label = (TextView) convertView.findViewById(R.id.container);
container_label.setText(child.getContainer());
TextView truck_number = (TextView) convertView.findViewById(R.id.truck_number);
truck_number.setText(child.getTruckNumber().toString());
TextView truck_weight = (TextView) convertView.findViewById(R.id.truck_weight);
truck_weight.setText(child.getTruckWeight().toString());
return convertView;
}
@Override
public int getChildrenCount(int groupPosition) {
ArrayList<QuotedListItem> chList = groups.get(groupPosition).getItems();
return chList.size();
}
@Override
public Object getGroup(int groupPosition) {
return groups.get(groupPosition);
}
@Override
public int getGroupCount() {
return groups.size();
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
QuotedListGroup group = (QuotedListGroup) getGroup(groupPosition);
if (convertView == null) {
LayoutInflater inf = (LayoutInflater) context
.getSystemService(context.LAYOUT_INFLATER_SERVICE);
convertView = inf.inflate(R.layout.activity_offered_trucks_group, null);
}
if(groupPosition%2 == 0) {
convertView.findViewById(R.id.offered_trucks_group).setVisibility(View.VISIBLE);
convertView.findViewById(R.id.offered_price_group).setVisibility(View.GONE);
TextView destination = (TextView) convertView.findViewById(R.id.offered_destination);
destination.setText(group.getDestination());
TextView trucks = (TextView) convertView.findViewById(R.id.offered_trucks);
trucks.setText(group.getTrucks() + "");
TextView date_label = (TextView) convertView.findViewById(R.id.offered_date_label);
date_label.setText(group.getDateLabel().toString());
TextView material = (TextView) convertView.findViewById(R.id.offered_material);
material.setText(group.getMaterial().toString());
TruckaroIconView see_hide_icon = (TruckaroIconView) convertView.findViewById(R.id.offered_see_hide_icon);
TextView see_hide_label = (TextView) convertView.findViewById(R.id.offered_see_hide_label);
if(isExpanded) {
see_hide_label.setText("Hide Trucks");
see_hide_icon.setRotation(180);
} else {
see_hide_label.setText("See Trucks");
see_hide_icon.setRotation(0);
}
} else {
convertView.findViewById(R.id.offered_trucks_group).setVisibility(View.GONE);
convertView.findViewById(R.id.offered_price_group).setVisibility(View.VISIBLE);
TextView offeredPrice = (TextView) convertView.findViewById(R.id.offered_price);
offeredPrice.setText(group.getOfferedPrice());
TextView quotedPrice = (TextView) convertView.findViewById(R.id.quoted_price);
quotedPrice.setText(group.getQuotedPrice());
}
return convertView;
}
protected static class RowViewHolder {
public Button buttonReject, buttonAccept;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
基于 accept/reject 按钮点击,我需要通过 intent 将 Textview 的数据传递给下一个 activity。
这是我的可扩展列表视图的样子:
在上图中,有四个列表项。第一和第三有children,但第二和第四没有child。当我点击第二个元素接受按钮时,我需要将第一个元素数据传递给下一个 activity。我无法在这些按钮上设置点击事件。
请帮我解决这个问题。
提前致谢。
好的。如果我正确理解您的问题,您的目标是传递上部项目的一个元素(在您的屏幕截图中,如果单击 Accept 按钮,上部项目的值将通过 intent
.
这是我得到的:
@Override
public View getGroupView(final int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
QuotedListGroup group = (QuotedListGroup) getGroup(groupPosition);
if (convertView == null) {
LayoutInflater inf = (LayoutInflater) context
.getSystemService(context.LAYOUT_INFLATER_SERVICE);
convertView = inf.inflate(R.layout.activity_offered_trucks_group, null);
}
if (groupPosition % 2 == 0) {
// Removed some code here.
} else {
convertView.findViewById(R.id.offered_trucks_group).setVisibility(View.GONE);
convertView.findViewById(R.id.offered_price_group).setVisibility(View.VISIBLE);
TextView offeredPrice = (TextView) convertView.findViewById(R.id.offered_price);
offeredPrice.setText(group.getOfferedPrice());
TextView quotedPrice = (TextView) convertView.findViewById(R.id.quoted_price);
quotedPrice.setText(group.getQuotedPrice());
// Added code here ----
// Initialize the buttons.
Button btnAccept = (Button) convertView.findViewById( < insert_btn_id_here >);
Button btnReject = (Button) convertView.findViewById( < insert_btn_id_here >);
// Set onClickListeners for the buttons.
btnAccept.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/*
Modify with the object you have, then pass the group position - 1
(double check this, you just need to pass the position of the upper item).
*/
Object groupObject = getGroup(groupPosition - 1);
/*
Get the value from the groupObject that you want to include in the intent.
NOTE: I'm just using some sample codes, modify it to what you need.
*/
String sampleStr = groupObject.destination.getText().toString();
/*
Intent stuff, I think you know this already.
*/
Intent intent = new Intent(context, SampleActivity.class);
intent.putExtra("SAMPLE_KEY", sampleStr);
context.startActivity(intent);
}
});
btnReject.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// your code for reject button here.
}
});
// Until here ----
}
return convertView;
}
我只是在 else
语句中为您的按钮(接受、拒绝)添加了监听器。您需要将其修改为您需要的内容,因为我看不到您的其余代码。如果您有任何疑问,请告诉我。干杯! :D