Так что на самом деле у меня есть MapActivity и ListActivity на одном экране, когда пользователь нажимает на один из Pin на карте, щелкнутое местоположение будет в верхней части списка и имеет другой фон и цвет разделителя.
Поэтому я начинаю посылать широту щелчка Pin и извлекать его на getView(), если щелкнутая широта совпадает с отображаемой широтой в первой записи, она что-то сделает.
Мне удалось создать первую запись в ListView, чтобы иметь определенный фон, но когда я просматриваю список, некоторые фон других записей также меняются.
Вот мой метод:
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;
}
Я не думаю, что список 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, чтобы найти правильное имя, я мог ошибаться в его точном заголовке. Я проверил, и я думаю, что это тот, который вам нужен. Но я не тестировал его на устройстве.