2014-02-22 64 views
2

我正在使用SimpleAdapter綁定ListView。現在,當用戶點擊項目時,我想從Click()事件中禁用該時間。我發現一些isEnabled()的教程,但我不明白如何使用它?

請幫我解決這個問題。我正在使用自定義ListView
以下代碼禁用ListView已禁用單擊ListView項目

SimpleAdapter adapter = new SimpleAdapter(this, arrlist, 
      R.layout.topicwisequestion, new String[] { "option" }, 
      new int[] { R.id.option }) { 

     public boolean areAllItemsEnabled() { 
      return ignoreDisabled; 
     } 

     public boolean isEnabled(int position) { 
      if (areAllItemsEnabled()) { 
       return true; 
      } 
      return false; 
     } 
    }; 
    lvTWOptions.setAdapter(adapter); 

    lvTWOptions.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       // Code... 
     } 
    }); 
+0

只是評論的onclick項目,..這是沒有那麼多清楚,你可以給我您的教程鏈接。我會告訴你答案.. – 2014-02-22 11:31:18

+0

@ Don'tBNegative,檢查更新的帖子。 –

+0

@JeetenParmar,我做了,感謝您發佈您的答案。快樂的編碼。 – InnocentKiller

回答

2

這樣做。

在areAllItemsEnabled定義布爾變量

boolean ignoreDisabled = false; 

然後:

public boolean areAllItemsEnabled() { 
    return ignoreDisabled; 
} 

,然後在IsEnabled的開頭:

public boolean isEnabled(int position) { 
    if (areAllItemsEnabled()) { 
     return true; 
    } 
} 

或者第二方式定義以下在代碼您的適配器類

private int mLastClicked; 
public void setLastClicked(int lastClicked){ 
    mLastClicked = lastClicked; 
} 

然後

public boolean areAllItemsEnabled() { 
    return false; 
} 

public boolean isEnabled(int position) { 
    // return false if position == position you want to disable 
} 

用的IsEnabled方法您的最後一次點擊的事件添加位置。

有關進一步的參考,你可以檢查此link

希望這會幫你的。

這樣做。

ListAdapter adapter = new SimpleCursorAdapter(MyList, Layout, c, 
new String[] { "Name", "Score" }, to) 
{ 
public boolean areAllItemsEnabled() 
{ 
return false; 
} 

public boolean isEnabled(int position) 
{ 
return false; 
} 
}; 
+0

我應該在哪裏寫'areAllItemsEnabled()'和'isEnabled()'? –

+0

哇! http://stackoverflow.com/a/5543323/812598 – GoRoS

+0

對不起mu錯誤,你必須添加在您的自定義陣列適配器類 – InnocentKiller

1

你將不得不延長了簡單的適配器,維護已被點擊索引列表,執行的IsEnabled(int)和檢查通過整數是在列表中。然後您可以有選擇地禁用點擊後的列表項。

添加一些代碼:

public class MySimpleAdapter extends SimpleAdapter { 

    private List<Integer> mDisabledRows; 

    public MySimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) { 
     super(context, data, resource, from, to); 
     mDisabledRows = new ArrayList<Integer>(); 
    } 

    public void disableRow(int index) { 
     mDisableRows.clear(); 
     mDisabledRows.add(index); 
    } 

    @Override 
    public boolean isEnabled(int index) { 
     return !mDisabledRows.contains(index); 
    } 
} 

從你onItemClick方法,你能叫adapter.disableRow(position)

我看,只要你想禁用行,一旦它的點擊。如果您只想禁用最後點擊的行,您可以只存儲最後點擊的索引。

1

我已經使用了下面的代碼並解決了我的問題。這非常簡單和容易。不需要使用任何額外的代碼。
我所做的是我已經把條件檢查位置,然後基於它,我禁用點擊項目。

我的代碼:

int pos; 
    SimpleAdapter adapter = new SimpleAdapter(this, arrlist, R.layout.topicwisequestion, new String[] { "option" }, new int[] { R.id.option }) { 

       public boolean isEnabled(int position) { 
        if (position != 0) { 
         if (position == pos) { 
          return false; 
         } else { 
          return true; 
         } 
        } else { 
         return true; 
        } 
       } 
      }; 

      lvTWOptions.setAdapter(adapter); 

      lvTWOptions.setOnItemClickListener(new OnItemClickListener() { 

       public void onItemClick(AdapterView<?> parent, View view, 
         int position, long id) { 

        pos = position; 
       } 
      });