因此,實際上我在一個屏幕中有一個MapActivity和ListActivity,當用戶單擊地圖上的某個Pin時,單擊的位置將位於列表的頂部並具有不同的背景和分隔線顏色。ListView - 僅在第一個項目上更改分隔線顏色
因此,我發起發送點擊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;
}
好的我明白了,但是我的方法邏輯正確,只是在列表的第一個條目上發生更改?因爲第一項被改變了,但是當我滾動列表時,一些條目也改變了它們的背景。這怎麼可能發生? – hectichavana
是的,這是因爲適配器使用convertView進行回收。粘貼適配器的getView()方法,我可以幫你修復它。基本上,當您向下滾動列表時,它將重新使用不同的顏色視圖來添加新內容。您只需確保告訴它將位置0以外的視圖變爲正常。 – FoamyGuy
好的問題的更新請看一看。謝謝 – hectichavana