如何根据它在列表中的位置更改android中listview的背景?

时间:2015-02-24 12:36:42

标签: android listview android-listview

我有一个通过适配器填充的列表视图。我需要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,非常简单。

2 个答案:

答案 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));

希望你有个主意......