要实现Android ListView更改背景颜色但保留点击动画,可以通过自定义ListView的Adapter来实现。以下是一个示例代码:
public class CustomListAdapter extends ArrayAdapter {
private int selectedPosition = -1;
public CustomListAdapter(Context context, int resource, List objects) {
super(context, resource, objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
if (position == selectedPosition) {
view.setBackgroundColor(Color.BLUE); // 设置选中项的背景颜色
} else {
view.setBackgroundColor(Color.TRANSPARENT); // 设置其他项的背景颜色为透明
}
return view;
}
public void setSelectedPosition(int position) {
selectedPosition = position;
}
}
public class MainActivity extends AppCompatActivity {
private ListView listView;
private CustomListAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.listView);
adapter = new CustomListAdapter(this, android.R.layout.simple_list_item_1, getListData());
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView> parent, View view, int position, long id) {
adapter.setSelectedPosition(position);
adapter.notifyDataSetChanged();
}
});
}
private List getListData() {
List data = new ArrayList<>();
// 添加列表项数据
return data;
}
}
在上面的代码中,我们通过自定义的Adapter来控制每个列表项的背景颜色。在点击事件中,我们设置选中项的位置,并调用Adapter的notifyDataSetChanged()方法来更新ListView的显示。这样就可以实现更改背景颜色并保留点击动画的效果。