2015-03-30 20 views
0

我試圖在Android中製作一個ListView,其中一些項目具有細節,一些項目沒有。對於那些具有細節的項目,我希望它們可點擊並點擊它們以呈現新的片段。對於那些有沒有細節的項目,我想隱藏ImageView並將列表項設置爲「不可點擊」。Android:List Item選擇性「clickability」

我試圖做到這一點通過以下方式(這是我的@Override getView方法在我ArrayAdapter類):

ParseGeoPoint location = itemScan.getParseGeoPoint("location"); 

ImageView chevron  = (ImageView)convertView.findViewById(R.id.chevron_image_view); 

if (location == null) { 
    subtitleLabel.setText("{Location Data Unavailable}"); 
    chevron.setVisibility(View.GONE); 
    convertView.setClickable(false); 

} else { 
    subtitleLabel.setText(""); <-- Not important 
    chevron.setVisibility(View.VISIBLE); 
    convertView.setClickable(true); 

} 

這裏是我的列表視圖對項目點擊收聽:

mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     // This may be unnecessary when I get this 
     // issue solved, but I put this in because 
     // of the odd behavior described below 
     if (view.isClickable() == true) { 
      // Push to a new fragment 
     } 
    } 
}); 

此代碼的一部分按預期工作,部分代碼不按預期工作。列表視圖項目的標籤已正確填充。列表視圖項目按預期顯示或隱藏「披露人字形」。

奇怪的是,意見的點擊能力似乎與我的預期相反。 「好」項目(具有細節的項目)不以任何方式響應點擊/點擊。 「壞」項目(沒有細節的項目)會播放聲音「點擊」聲音,但我的OnItemClickListener()中的if聲明可防止代碼被觸發。所以,我的列表視圖呈現無效。

我是否誤解了setClickable(boolean)的預期功能?我從this answer得到了這個想法。

回答

0

即時猜測你使用的ArrayList來存儲你的數據,你可以做到這一點

mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      ArrayList Object Type itemScan = arrayList.get(position); 
      ParseGeoPoint location = itemScan.getParseGeoPoint("location"); 

      if (location == null) { 
        return; 

      } else { 
       // Push to a new fragment 
      } 
     } 
    }); 
+0

確定。這是有道理的,但理想情況下,我想避免那些不會推送到新片段的項目的「點擊」聲音。想法? – mbm29414 2015-03-30 22:32:08