2015-10-06 31 views

回答

2

请结帐这个github上,我只是设置https://github.com/lt-tibs1984/ExpandableListView

的想法是隐藏和使用的知名度显示视图,这里是表示点一些代码:

首先设置你的项目类或任何对象,你要使用(简单的POJO实现Parcelable)

public class Item implements Parcelable{ 

public String title; 
public String description; 
public boolean isExpanded; 

public Item(){} 

public Item(Parcel in){ 
    title = in.readString(); 
    description = in.readString(); 
    isExpanded = in.readInt() == 1; 
} 

@Override 
public int describeContents() { 
    return 0; 
} 

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    dest.writeString(title); 
    dest.writeString(description); 
    dest.writeInt(isExpanded ? 1 : 0); 
} 

public static final Parcelable.Creator<Item> CREATOR = new Parcelable.Creator<Item>(){ 
    @Override 
    public Item createFromParcel(Parcel source) { 
     return new Item(source); 
    } 

    @Override 
    public Item[] newArray(int size) { 
     return new Item[size]; 
    } 
}; 
} 

然后创建您的适配器:

public class ExpandableAdapter extends BaseAdapter{ 

List<Item> items; 
Context context; 

public class Row{ 
    AppCompatTextView mTvTitle; 
    AppCompatTextView mTvDescription; 
    FrameLayout mFlWrapper; 
    ImageView mIvArrow; 
} 

public ExpandableAdapter(Context context, List<Item> items){ 
    this.items = items; 
    this.context = context; 
} 

@Override 
public int getCount() { 
    return items.size(); 
} 

@Override 
public Object getItem(int position) { 
    return items.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    Row theRow; 

    if(convertView == null){ 
     theRow = new Row(); 
     convertView = LayoutInflater.from(context).inflate(R.layout.row_item, parent, false); 
     theRow.mFlWrapper = (FrameLayout) convertView.findViewById(R.id.fl_wrapper); 
     theRow.mTvTitle = (AppCompatTextView) convertView.findViewById(R.id.tv_title); 
     theRow.mTvDescription = (AppCompatTextView) convertView.findViewById(R.id.tv_description); 
     theRow.mIvArrow = (ImageView) convertView.findViewById(R.id.iv_arrow); 

     convertView.setTag(theRow); 
    }else{ 

     theRow = (Row) convertView.getTag(); 
    } 

    // Update the View 
    Item item = items.get(position); 
    if(item.isExpanded){ 
     theRow.mFlWrapper.setVisibility(View.VISIBLE); 
     theRow.mIvArrow.setRotation(180f); 
    }else{ 
     theRow.mFlWrapper.setVisibility(View.GONE); 
     theRow.mIvArrow.setRotation(0f); 
    } 

    theRow.mTvTitle.setText(item.title); 
    theRow.mTvDescription.setText(item.description); 


    // return the view 
    return convertView; 
} 
} 
在活动

最后:

public class MainActivity extends AppCompatActivity { 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    ListView lvItems = (ListView) findViewById(R.id.lv_items); 
    ExpandableAdapter adapter = getAdapter(); 

    lvItems.setAdapter(adapter); 
    lvItems.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      ExpandableAdapter adapter = (ExpandableAdapter) parent.getAdapter(); 

      Item item = (Item) adapter.getItem(position); 
      if(item != null){ 
       if(item.isExpanded){ 
        item.isExpanded = false; 

       }else{ 
        item.isExpanded = true; 
       } 
      } 
      adapter.notifyDataSetChanged(); 
     } 
    }); 
} 


private ExpandableAdapter getAdapter(){ 

    List<Item> items = new ArrayList<>(); 

    for(int i = 0; i < 50; i++){ 
     Item item = new Item(); 
     item.title = "Title Item " + i; 
     item.description = "Description for Title Item "+ i; 
     item.isExpanded = false; 

     items.add(item); 
    } 

    return new ExpandableAdapter(this, items); 
} 
} 
+0

嗨,我是新来的android。如果你不介意可以使用eclipse(ADT) – Bahu

+0

@kiran提供示例代码,请使用Android工作室,因为这是官方的Android IDE,但您可以创建MainActivity.java,ExpandableListAdapter.java和Item .java然后将代码从github中复制到你的类中。您需要将支持库作为依赖项添加,或者将'AppCompatTextView'更改为'TextView' –

+0

感谢您的帮助。现在我试图通过使用你的指示来达到这个目的。正如你所说我将在未来使用IDE – Bahu

0

特别感谢“inner_class7”:根据“inner_class7”我得到了答案,但通过他的代码,我必须达到两个要求

要求1:当我们点击说明展开视图正在关闭,但我不想关闭视图

要求2:我想cl创建Global.java

:OSE前一视图(如果存在的话)延伸的新的视图时

要根据下面的步骤

步骤1实现上述两个要求,更新“inner_class7”代码

public class Global { public static Item itemGlobal; } 

步骤2:更新MainActivity.java

import static com.app.listviewdrop.Global.itemGlobal; 


public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_list_view_drop); 


    ListView lvItems = (ListView) findViewById(R.id.lv_items); 
    ExpandableAdapter adapter = getAdapter(); 

    lvItems.setAdapter(adapter); 
    lvItems.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      ExpandableAdapter adapter = (ExpandableAdapter) parent.getAdapter(); 

      Item item = (Item) adapter.getItem(position); 

      if(item != null){ 
       if(item.isExpanded){ 
        item.isExpanded = false; 

       }else{ 
        item.isExpanded = true; 

        itemGlobal = (Item)adapter.getItem(position); 
       } 
      } 

      adapter.notifyDataSetChanged(); 
     } 
    }); 
} 


private ExpandableAdapter getAdapter(){ 

    List<Item> items = new ArrayList<Item>(); 

    for(int i = 0; i < 50; i++){ 
     Item item = new Item(); 
     item.title = "Title Item " + i; 
     item.description = "Description for Title Item "+ i; 
     item.isExpanded = false; 

     items.add(item); 
    } 

    return new ExpandableAdapter(this, items); 
} 
} 

第三步:更新ExpandableAdapter.java

import static com.YOUR PACKAGE NAME.itemGlobal; 


public class ExpandableAdapter extends BaseAdapter { 

List<Item> items; 
Context context; 
// List<Item> list = new ArrayList<Item>(); 


public class Row { 
    AppCompatTextView mTvTitle; 
    AppCompatTextView mTvDescription; 
    FrameLayout mFlWrapper; 
    ImageView mIvArrow; 
} 

public ExpandableAdapter(Context context, List<Item> items) { 
    this.items = items; 
    this.context = context; 
} 

@Override 
public int getCount() { 
    return items.size(); 
} 

@Override 
public Object getItem(int position) { 
    return items.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    Row theRow; 

    if (convertView == null) { 
     theRow = new Row(); 
     convertView = LayoutInflater.from(context).inflate(R.layout.row_item, parent, false); 
     theRow.mFlWrapper = (FrameLayout) convertView.findViewById(R.id.fl_wrapper); 
     theRow.mTvTitle = (AppCompatTextView) convertView.findViewById(R.id.tv_title); 
     theRow.mTvDescription = (AppCompatTextView) convertView.findViewById(R.id.tv_description); 
     theRow.mIvArrow = (ImageView) convertView.findViewById(R.id.iv_arrow); 

     convertView.setTag(theRow); 


     theRow.mFlWrapper.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       // TODO Auto-generated method stub 

      } 
     }); 


    } else { 

     theRow = (Row) convertView.getTag(); 
    } 

    // Update the View 
    Item item = items.get(position); 


    if (item.isExpanded) { 

     if(item == itemGlobal){ 

      theRow.mFlWrapper.setVisibility(View.VISIBLE); 
      theRow.mIvArrow.setRotation(180f); 

     }else { 
      theRow.mFlWrapper.setVisibility(View.GONE); 
      theRow.mIvArrow.setRotation(0f); 

      item.isExpanded = false; 
     } 

    } else { 
     theRow.mFlWrapper.setVisibility(View.GONE); 
     theRow.mIvArrow.setRotation(0f); 


    } 


    theRow.mTvTitle.setText(item.title); 
    theRow.mTvDescription.setText(item.description); 

    // return the view 
    return convertView; 
} 

} 

我实现这些要求只是 “inner_class7” 的帮助。许多很多感谢“inner_class7”