2011-10-15 92 views
18

因此基本上我需要一些幫助或一些建議來解決問題。我從數據庫填充我的列表視圖,當我創建我的列表視圖時,如果position上的項目ID與我的數據庫中另一個表中的ID相同,我需要檢查。如果是的話,你可以點擊那個項目,如果沒有,我希望它禁用它,但我發現有關如何做到這一點的所有信息..我真的不明白如何做到這一點。Android禁用列表視圖項目

import java.util.ArrayList; 


import android.app.Activity; 
import android.content.Context; 
import android.graphics.Bitmap; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

//For more information look at the bottom of file. 

public class LazyAdapter extends BaseAdapter { 


    private Activity activity; 
    private String[] data; 
    private ArrayList<String> name; 
    private ArrayList<String> info; 
    private static LayoutInflater inflater=null; 
    public ImageLoader imageLoader; 
    private Bitmap b; 

    public LazyAdapter(Activity a, Bitmap d, ArrayList<String> names, ArrayList<String> information) { 
     activity = a; 
     b=d; 
     name=names; 
     info = information; 
     inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     imageLoader=new ImageLoader(activity.getApplicationContext()); 
    } 

    public int getCount() { 
     return name.size(); 
    } 

    public Object getItem(int position) { 
     return position; 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    public static class ViewHolder{ 
     public TextView name,info; 
     public ImageView image; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     View vi=convertView; 
     ViewHolder holder; 
     if(convertView==null){ 
      vi = inflater.inflate(R.layout.item, null); 
      holder=new ViewHolder(); 
      holder.name=(TextView)vi.findViewById(R.id.name); 
      holder.info=(TextView)vi.findViewById(R.id.info); 
      holder.image=(ImageView)vi.findViewById(R.id.image); 
      vi.setTag(holder); 
      Log.v("Position","Position : "+position); 
     } 
     else 
      holder=(ViewHolder)vi.getTag(); 
      holder.name.setText(name.get(position)); 
      holder.info.setText(info.get(info.size()-1)); 

      //Here I must do a black magic and get the images if user had 'em. 

      holder.image.setImageBitmap(b); 

      //holder.image.setTag(data[position]); 
      //imageLoader.DisplayImage(data[position], activity, holder.image); 

      // Black magic over. 
     return vi; 
    } 
} 

任何想法或建議如何做到這一點?

+0

什麼是你目前使用的?你是否爲listview定義了自定義適配器? –

+0

是的,實際上我正在使用自定義適配器。讓我把代碼 –

+0

你可以做到這一點,在getview方法中,放入一個if條件並獲得項目ID,同時我相信你有另一個集合,你有一個ID列表來檢查,或者做一個如果count爲1表示存在,否則不存在(如果存在),則選擇帶有id的查詢,將視圖的setEnabled方法設置爲true否則爲false。 (在列表視圖的項目點擊上執行此操作) –

回答

0

不知道你在那裏做什麼,但是你想要做的是像擴展Activity(或者ListActivity)一樣定義你的類。然後,通過擴展BaseAdapter,使您的適配器類成爲Activity類中的嵌套類。

一旦你完成了,你將在你的適配器類中編寫getView()方法。取決於您提到的條件,將OnClickListener分配給視圖。

68

在適配器中有一個方法名稱isEnabled,您可以將其覆蓋。這被稱爲像getview每行。 onclicklistener只會在此函數返回true時觸發。所以試着在你的customm適配器中這樣做。

@Override 
public boolean isEnabled(int position) { 
    if(YOUR CONDTITION){ 
     return false; 
    } 
    return true; 
} 
+6

或者更簡單地說:'return!(YOUR_CONDITION);',您可以在其中使用反操作('!='vs'=='以進一步簡化)。 – reece

+3

很好的答案。我想知道爲什麼這不被接受? – Abx

+0

這正是我一直在尋找的!我很驚訝沒有任何我讀過的教程提到它。 – Aelexe

2

當你傳遞對象BaseAdpater的名單,在所謂的IsEnabled此列表的對象添加一個字段,將其設置爲需要真/假,然後覆蓋這樣

@Override 
public boolean isEnabled(int position) { 

    return info.get(position).isEnabled; 
} 
BaseAdapter的的IsEnabled方法

其中的信息是你的對象

2

例如列表,如果你想禁用的位置0至5

@Override 
public boolean isEnabled(int position){ 
    if(position >= 0 && position < 6) 
     return false; 
    else 
     return true; 
} 

@Override 
public boolean areAllItemsEnabled(){ 
    return true; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

      //CODE OF ADAPTER 
} 
-1

在你的適配器中,添加這個。

if ((position)!="your item"){ 
    view.setEnabled(true); 
    view.setClickable(true); 
} else{ 
    view.setEnabled(false); 
    view.setClickable(false); 
} 

`

相關問題