我有一个通过适配器填充的列表视图。我需要listview中的一个项目(只是文本的一部分)与其他项目相比具有不同的背景(将其标记为当前选择的项目)。 我有所有的后台逻辑,我只需要一种方式来说明listview.setBackgroundById(int position) 或类似的东西。
我该怎么做? 这需要尽可能简单,因为活动中完成的所有其他事情目前都是完美的。 :)
根据要求,这是我使用的适配器:
public class SampleAdapter extends ArrayAdapter<SampleItem> {
private String title;
public SampleAdapter(Context context) {
super(context, 0);
}
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.row_station, null);
}
TextView title = (TextView)convertView.findViewById(R.id.station_name);
font.setFont(title, 2, getActivity());
title.setText(getItem(position).title);
RelativeLayout info = (RelativeLayout)convertView.findViewById(R.id.info_relative_button);
info.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
MainActivity.setCurrentTab(41);
MainActivity.setBackDisabled(true);
Log.e("current tab:",String.valueOf(MainActivity.getCurrentTab()));
Fragment fragment = new StationInfo();
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
UserManager.getInstance().setStationId(getItem(position).id);
}
});
return convertView;
}
}
SampleItem有2个String字段,title和id,非常简单。
答案 0 :(得分:0)
您需要使用自定义列表适配器并让它返回具有所需背景的视图。创建一个扩展ListAdapter或任何现有SimpleAdapter等的类,并覆盖getView以为您的元素提供合适的视图,并添加设置该视图背景所需的任何逻辑。 没有办法告诉listview本身按id或position来装饰它的一些元素。
更新:我刚刚注意到你添加了列表适配器代码。 由于您已经在实现getView,因此只需调用convertView.setBackgroundColor来更改元素的背景,或者根据情况使两个不同的视图膨胀。
(顺便说一句,在onClickListener中调用静态方法非常糟糕。)
答案 1 :(得分:0)
在ListView
适配器中:
@Override
public View getView(int position, View view, ViewGroup viewGroup) {
if(view==null)
....
//for example every even list item to be grey, every odd to be white
if(((position+1)%2)==0)
view.setBackgroundColor(mContext.getResources().getColor(R.color.grey));
else view.setBackgroundColor(mContext.getResources().getColor(android.R.color.white));
希望你有个主意......