2012-06-01 55 views
1

因此,實際上我在一個屏幕中有一個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; 
     } 

回答

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文件夾中找到正確的名稱,我可能在其確切的標題上是錯誤的。我檢查了一下,我認爲那是你需要的。但是我沒有在設備上測試它。

+0

好的我明白了,但是我的方法邏輯正確,只是在列表的第一個條目上發生更改?因爲第一項被改變了,但是當我滾動列表時,一些條目也改變了它們的背景。這怎麼可能發生? – hectichavana

+0

是的,這是因爲適配器使用convertView進行回收。粘貼適配器的getView()方法,我可以幫你修復它。基本上,當您向下滾動列表時,它將重新使用不同的顏色視圖來添加新內容。您只需確保告訴它將位置0以外的視圖變爲正常。 – FoamyGuy

+0

好的問題的更新請看一看。謝謝 – hectichavana

相關問題