2015-10-06 74 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」