特别感谢“inner_class7”:根据“inner_class7”我得到了答案,但是通过使用他的代码我必须满足两个要求
要求 1:当我们点击描述时,展开的视图正在关闭,但我不想关闭视图
要求2:我想在扩展新视图时关闭之前的视图(如果存在)
要实现以上两个要求,请按照以下步骤更新“inner_class7”代码
第 1 步: 创建 Global.java
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);
}
}
第 3 步: 更新 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”