【问题标题】:how to create Expandable layout in android?如何在android中创建可扩展布局?
【发布时间】:2011-08-18 13:43:51
【问题描述】:

谁能帮我在 android 市场上创建一个可扩展的视图,比如更多按钮? 当我们点击更多按钮时,它将展开视图,其中包含有关 android 市场中应用程序的更多详细信息..

任何帮助将不胜感激..

谢谢

sathish

【问题讨论】:

    标签: android view expandable


    【解决方案1】:

    我一直在做类似的事情。

    目前在more/less栏模式下看起来像这样:

    它仍在进行中,但可以查看项目和源代码here

    【讨论】:

      【解决方案2】:

      也许实现这一点的最佳方法是使用ArrayAdapter。当您单击更多按钮获取更多数据并使用addAll() 方法将所有新获取的数据添加到适配器。 addAll() 会自动将更改传播到 ListView,因此不必费心显式通知它。

      【讨论】:

      • 感谢您的快速回复,但我想创建一个不仅包含文本、一些按钮和链接以及一些其他编辑文本字段的视图。那么我该如何实现呢?
      【解决方案3】:
      public class ModifiedExpandableList extends Activity {
      
          ExpandableListAdapter mAdapter;
          private ExpandableListView mExpandableListView;
      
          @Override
          public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.main_copy);
              // set our list
              mExpandableListView = (ExpandableListView)findViewById(R.id.list);
              // Set up our adapter
              mAdapter = new MyExpandableListAdapter(this);
              mExpandableListView.setAdapter(mAdapter);
              // Need no icon as of now
              mExpandableListView.setGroupIndicator(null);
              registerForContextMenu(mExpandableListView);
          }
      
          @Override
          public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
              menu.setHeaderTitle("Sample menu");
              menu.add(0, 0, 0,"dd");
          }
      
          @Override
          public boolean onContextItemSelected(MenuItem item) {
              ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) item.getMenuInfo();
      
              String title = ((TextView) info.targetView).getText().toString();
      
              int type = ExpandableListView.getPackedPositionType(info.packedPosition);
              if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {
                  int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition); 
                  int childPos = ExpandableListView.getPackedPositionChild(info.packedPosition); 
                  Toast.makeText(this, title + ": Child " + childPos + " clicked in group " + groupPos,
                          Toast.LENGTH_SHORT).show();
                  return true;
              } else if (type == ExpandableListView.PACKED_POSITION_TYPE_GROUP) {
                  int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition); 
                  Toast.makeText(this, title + ": Group " + groupPos + " clicked", Toast.LENGTH_SHORT).show();
                  return true;
              }
      
              return false;
          }
      
          /**
           * A simple adapter which maintains an ArrayList of photo resource Ids. 
           * Each photo is displayed as an image. This adapter supports clearing the
           * list of photos and adding a new photo.
           *
           */
          public class MyExpandableListAdapter extends BaseExpandableListAdapter {
      
              Context mContext;
              public MyExpandableListAdapter(Context context){
                  this.mContext = context;
              }
      
              // Sample data set.  children[i] contains the children (String[]) for groups[i].
              private String[] groups = { "People Names", "Dog Names", "Cat Names", "Fish Names" };
              private String[][] children = {
                      { "Arnold", "Barry", "Chuck", "David" },
                      { "Ace", "Bandit", "Cha-Cha", "Deuce" },
                      { "Fluffy", "Snuggles","ddef","afadsfasf" },
                      { "Goldy", "Bubbles","sfef","dafs" }
              };
      
              public Object getChild(int groupPosition, int childPosition) {
                  return children[groupPosition][childPosition];
              }
      
              public long getChildId(int groupPosition, int childPosition) {
                  return childPosition;
              }
      
              public int getChildrenCount(int groupPosition) {
                  int result=4;
      
                  return result;
             }
      
              public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
                      View convertView, ViewGroup parent) {
                  View v = null;
                  // changed here
                      LayoutInflater li = ModifiedExpandableList.this.getLayoutInflater();
                      v = li.inflate(R.layout.child_view,null);
                      TextView tv = (TextView)v.findViewById(R.id.TextView01);
                      tv.setText(getChild(groupPosition, childPosition).toString());
                      ImageView im = (ImageView)v.findViewById(R.id.ImageView01);
                      im.setBackgroundDrawable(ModifiedExpandableList.this.getResources().getDrawable(R.drawable.closearrow));
                  return v;
              }
      
              public Object getGroup(int groupPosition) {
                  return groups[groupPosition];
              }
      
              public int getGroupCount() {
                  return groups.length;
              }
      
              public long getGroupId(int groupPosition) {
                  return groupPosition;
              }
      
              public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
                      ViewGroup parent) {
                  // change here to modify parent group layout
                  View v = null;
                  LayoutInflater li = ModifiedExpandableList.this.getLayoutInflater();
                  v = li.inflate(R.layout.parent_view,null);
                  TextView tv = (TextView)v.findViewById(R.id.TextView01);
                  tv.setText(getGroup(groupPosition).toString());
                  ImageView im = (ImageView)v.findViewById(R.id.ImageView01);
                  im.setBackgroundDrawable(ModifiedExpandableList.this.getResources().getDrawable(R.drawable.closearrow));
                  if(isExpanded){
                      im.setBackgroundDrawable(ModifiedExpandableList.this.getResources().getDrawable(R.drawable.closearrow_b));
                  }
                  return v;
              }
      
              public boolean isChildSelectable(int groupPosition, int childPosition) {
                  return true;
              }
      
              public boolean hasStableIds() {
                  return true;
              }
      
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多