所以实际上我在一个屏幕上有一个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;
}
答案 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文件夹来找到正确的名称,我可能错了它的确切标题。我查了一下,我认为那是你需要的。但我没有在设备上测试它。