- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
是否可以更改 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;
}}
这就是我将适配器设置为 ListView 的方式
lv = (ListView) findViewById(R.id.lv);
adapter = new ListAdapter(this,R.layout.polozkaseznam,list);
lv.setAdapter(adapter);
我想出了如何通过创建新的自定义适配器并将其分配给 ListView 来更改每个项目的布局,但遗憾的是这不是我需要的。
非常感谢!
最佳答案
适配器的getView()
方法用于创建原始 View 。您可以在其中使用 View 的 setOnTouchListener()
方法来添加 View.OnTouchListener执行。该类的 onTouch()
处理程序接收选定的 View 。
添加到 OnTouchListener 实现中的一个有用成员是 GestureDetector ;这是使用 OnGestureListener 实现创建的,您可以将 OnTouchListener 的 onTouch()
回调中收到的 MotionEvent
传递给该实现。然后,该监听器用于区分各种事件(单击、双击等); GestureDetector.SimpleOnGestureListener与处理此类事件的许多回调一起使用是一个很好的实现,您可以覆盖。
在某些时候(例如,在 SimpleGestureListener 的 onDown()
回调中,首次触摸某个项目时会触发该回调),您可以修改传递给 OnTouchListener 的 View 的布局。要将其更改回来,您可以使用手势“打开”阶段的处理程序,或者,如果您希望该项目保持原样直到选择其他内容,请保留对最后选定 View 的引用,并在选择另一个 View 时更改它。
如果最后一点不清楚,其想法是 SimpleGestureListener 是 View 的 OnTouchListener 实例的成员对象,因此它可以访问属于封闭 OnTouchListener 的 View 。
关于java - 更改 ListView 中所选项目的布局(自定义适配器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50627287/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!