【发布时间】:2018-05-31 14:59:48
【问题描述】:
是否可以更改 ListView 中所选项目的布局?
我使用自定义适配器使用 ListView 制作了简单的应用程序。它工作得很好,但我想将所选项目的布局更改为不同的布局。 在实践中,被点击的项目会扩大它的高度并且会出现一些新的按钮。一旦用户取消选择项目,它将返回经典布局。
这是我的自定义适配器代码
public class ListAdapter extends ArrayAdapter<Polozka> {
// context mem variable
private Context mContext;
// Konstruktory
public ListAdapter(Context context,int textViewResourceId){
super(context,textViewResourceId);
}
public ListAdapter(Context context, int resource, List<Polozka> items){
super(context,resource,items);
this.mContext=context;
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
View v = convertView;
if (v == null){
LayoutInflater vi;
vi = LayoutInflater.from(getContext());
v = vi.inflate(R.layout.polozkanakupniseznam,null);
}
final Polozka p = getItem(position);
if (p != null){
final TextView tt1 = (TextView) v.findViewById(R.id.seznam_nazevPolozky);
TextView tt2 = (TextView) v.findViewById(R.id.seznam_pocetPolozky);
CheckBox cb1 = (CheckBox) v.findViewById(R.id.checkBox_koupeno);
Button btnPridat = (Button) v.findViewById(R.id.buttonPridat);
Button btnOdebrat = (Button) v.findViewById(R.id.buttonOdebrat);
if (tt1 != null){
tt1.setText(p.getNazev());
}
if (tt2 != null){
tt2.setText(Integer.toString(p.getPocet()));
}
return v;
}}
这就是我将适配器设置为列表视图的方式
lv = (ListView) findViewById(R.id.lv);
adapter = new ListAdapter(this,R.layout.polozkaseznam,list);
lv.setAdapter(adapter);
我想出了如何通过创建新的自定义适配器并将其分配给 ListView 来更改每个项目的布局,但遗憾的是这不是我需要的。
非常感谢!
【问题讨论】:
-
是的,这是可能的。但最好使用 RecyclerView。显然,您永远找不到与您的代码完全相同的代码。因此,您必须了解其他人的代码才能应用自己的更改。
-
我来看看 RecyclerView。我已经发现一些文章在不同的帖子中提到了如何使用 RecyclerView 来做到这一点,但我想问一下是否有一些简单的方法也可以使用 ListView 来做到这一点。 :) 感谢您的回复。