expandablelistview的组元素

时间:2016-05-06 07:25:50

标签: android expandablelistview expandablelistadapter

我有两个关于groupView' s(不是孩子)的expandablelistview点击事件的问题

  1. 当我在GroupView中有孩子时,我可以使用以下代码段获取groupPosition

    expandableListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener(){

        @Override
        public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
            Log.d("Clicked on item: ", ""+groupPosition);
            return false;
        }
    });
    
  2. 但是当我没有孩子时,很遗憾' MyApp'单击鼠标后停止。在这种情况下,如何获取groupPosition?

    1. 我的expandablelistview的groupView布局中有两个按钮。现在我需要为这两个按钮注册两个不同的点击事件。这个groupView也没有孩子。我彻底搜索了,但我对此毫无头绪。

          <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>
      
    2. 这是我的适配器类:

      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;
      }
      

      }

      根据接受/拒绝按钮点击,我需要通过意图将Textview的数据传递给下一个活动。

      以下是我的可展开列表视图的样子: enter image description here

      在上图中,有四个列表项。第一和第三有孩子,但第二和第四没有孩子。当我点击第二个元素接受按钮时,我需要将第一个元素数据传递给下一个活动。我无法在这些按钮上设置点击事件。

      请帮我解决这个问题。

      提前致谢。

1 个答案:

答案 0 :(得分:1)

好。如果我正确理解您的问题,那么您的目标是传递上方项目的元素(在屏幕截图中,如果单击接受按钮,则上方项目中的值将为通过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