ListView - 仅在第一项上更改分隔线颜色

时间:2012-06-01 14:50:54

标签: android

所以实际上我在一个屏幕上有一个MapActivity和ListActivity,当用户点击地图上的一个Pin时,点击的位置将位于List的顶部,并具有不同的背景和分隔颜色。

所以我开始发送点击的Pin的纬度并在getView()上检索它,如果点击的纬度与第一个条目上显示的纬度相同,它会做一些事情。

我设法让ListView的第一个条目具有特定的背景,但是当我向下滚动List时,其他一些条目的背景也会被更改。

这是我的方法:

double selectedLat = WWHApplication.getSelectedLatitude();
            DecimalFormat df = new DecimalFormat("#.#####");

            String dLat = df.format(lat);
            String sLat = df.format(selectedLat);
            if (position == 0) {
                if (dLat.equals(sLat)) {
                    feedViewHolder.layout
                            .setBackgroundResource(R.drawable.list_segment_selected);

                }
            }

如何仅在第一项上更改分隔符的颜色和ListView的背景? 我真的很感激,如果有人可以在这种情况下帮助我,我也会接受任何其他解决方案。 谢谢。

已更新: 这是getView()方法

@Override
        public View getView(final int position, View convertView,
                ViewGroup parent) {
            layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            FeedViewHolder feedViewHolder = null;
            final VideoLocationDB vidLocation = videoLocationsDB[position];
            String url = vidLocation.documentary_thumbnail_url;
            String name = vidLocation.name;
            String title = vidLocation.name;
            String desc = vidLocation.text;
            double lat = vidLocation.latitude;
            double lng = vidLocation.longitude;
            String distance = calculateDistance(lat, lng);

            // System.out.println("ON LOC DISTANCE: "+distance);
            if (convertView == null) {

                // convertView = LocationsListActivity.this.getLayoutInflater()
                // .inflate(R.layout.listitems, null, true);
                convertView = layoutInflater.inflate(R.layout.listitems,
                        parent, false);
                feedViewHolder = new FeedViewHolder();
                feedViewHolder.layout = (LinearLayout) convertView
                        .findViewById(R.id.list_bg);
                feedViewHolder.titleView = (TextView) convertView
                        .findViewById(R.id.txt_title);
                feedViewHolder.descView = (TextView) convertView
                        .findViewById(R.id.txt_list_desc);
                feedViewHolder.more = (TextView) convertView
                        .findViewById(R.id.txt_more);
                feedViewHolder.distanceView = (TextView) convertView
                        .findViewById(R.id.txt_distance);
                feedViewHolder.v = (ImageView) convertView
                        .findViewById(R.id.image);

                Typeface fontRegular = Typeface.createFromAsset(getAssets(),
                        "miso.otf");
                feedViewHolder.titleView.setTypeface(fontRegular);
                Typeface fontLight = Typeface.createFromAsset(getAssets(),
                        "miso-light.otf");
                feedViewHolder.descView.setTypeface(fontLight);
                feedViewHolder.more.setTypeface(fontLight);
                feedViewHolder.distanceView.setTypeface(fontRegular);

                convertView.setTag(feedViewHolder);

            } else {
                feedViewHolder = (FeedViewHolder) convertView.getTag();
            }

            feedViewHolder.v.setTag(url);
            loader.DisplayImage(url, LocationsListActivity.this,
                    feedViewHolder.v, name);

            double selectedLat = WWHApplication.getSelectedLatitude();
            DecimalFormat df = new DecimalFormat("#.#####");

            String dLat = df.format(lat);
            String sLat = df.format(selectedLat);
            if (position == 0) {
                if (dLat.equals(sLat)) {
                    feedViewHolder.layout
                            .setBackgroundResource(R.drawable.list_segment_selected);
                }
            }

            feedViewHolder.titleView.setText(title.toUpperCase());
            feedViewHolder.descView.setText(desc);
            feedViewHolder.more.setText(getString(R.string.de_list_more));
            feedViewHolder.distanceView.setText(distance);

            return convertView;
        }

1 个答案:

答案 0 :(得分:1)

我认为库存ListView并不支持这种行为。

你可以通过将ListView上的分隔符设置为0来伪造它,并将分隔符自己添加为“普通”行。因为你可以使行看起来像你想要的任何东西,大概你可以膨胀一个看起来像你想要的任何分隔物的视图,并将它添加到每个项目之间的列表中。应该可以在适配器getView()方法中实现该逻辑。

修改

我认为如果你为你添加一个else块就应该修复,如果这样就改变颜色了:

if (position == 0) {
    if (dLat.equals(sLat)) {
        feedViewHolder.layout.setBackgroundResource(R.drawable.list_segment_selected);
    }
}else{
    feedViewHolder.layout.setBackgroundResource(android.R.drawable.list_selector_background);

}

并将'list_normal'替换为您的默认背景可绘制对象。如果你没有设置一个可能你需要的东西就像android.R.drawable.list_selector_background你可能需要查看sdk res drawable文件夹来找到正确的名称,我可能错了它的确切标题。我查了一下,我认为那是你需要的。但我没有在设备上测试它。