嗨,我想做下拉列表視圖下拉詳細視圖。例如見這個Image 1。當我們點擊任何列表視圖時,它會顯示詳細視圖(相對於列表視圖),如Image 2。此詳細視圖不像可擴展列表視圖或微調器。請幫我做這個Android:下拉列表視圖詳細視圖(不是微調器或不可擴展列表視圖)
1
A
回答
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
特別感謝「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」
相關問題
- 1. Android微調器 - 展開列表視圖
- 2. 可擴展列表視圖中的不同子視圖android
- 3. 可擴展列表視圖
- 4. Android中的可擴展列表視圖
- 5. 可擴展列表視圖android
- 6. Android可擴展列表視圖
- 7. Android的可擴展列表視圖
- 8. Android可擴展列表視圖
- 9. Android可擴展列表視圖
- 10. 列表視圖詳細視圖不顯示任何東西
- 11. 多視圖(圖標,詳細,列表等)
- 12. Android的列表視圖到另一個詳細信息視圖
- 13. 詳細信息視圖控件中的多列下拉列表
- 14. 擴展列表視圖
- 15. 擴展列表視圖
- 16. 擴展列表視圖不起作用
- 17. 在列表視圖(詳細視圖)上排序圖標c#
- 18. 與Android中的微調列表視圖
- 19. 表視圖細胞 - 的UITableView - 不能在詳細視圖
- 20. android中可擴展列表視圖中的圖像圖標
- 21. Windows Phone 8可擴展列表視圖
- 22. 刷新可擴展列表視圖
- 23. iOS中的可擴展列表視圖
- 24. 要爲可擴展列表視圖
- 25. 可擴展列表視圖與片段
- 26. 可擴展列表視圖刷新
- 27. 可擴展列表視圖設計
- 28. .NET MVC - 列表和詳細視圖
- 29. ASP.NET僅插入詳細信息視圖和下拉列表
- 30. 在可擴展列表視圖中獲取特定子視圖
這是非常容易實現的消耗性列表視圖,那麼爲什麼你不想'消耗性列表視圖'? – Satyavrat