2011-11-05 72 views
0

我正在嘗試使用此處提供的TouchListView:https://github.com/commonsguy/cwac-touchlist。這是一個用於創建可重新訂購列表的Android庫。以編程方式創建TouchList

我可以運行演示很好,但我找不到在Java中創建TouchList的方法,即無需在XLM佈局中定義它。

下面是演示代碼:

@Override 
public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.main); 

    TouchListView tlv=(TouchListView)getListView(); 
    adapter=new IconicAdapter(); 
    setListAdapter(adapter); 

    tlv.setDropListener(onDrop); 
    tlv.setRemoveListener(onRemove); 
} 

這是一個ListActivity裏面。這工作正常。現在在這裏,我試圖避免使用ListActivity:

... 
TouchListView tlv = new TouchListView(this, null); 
adapter=new IconicAdapter(); 
setListAdapter(adapter); 
... 

沒有運氣。

LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE); 
TouchListView tlv = (TouchListView) (inflater.inflate(R.layout.touchlistview, null)); 

也不管用。

在這兩種情況下,列表顯示正確,但我無法移動項目。

有什麼想法?

+1

那麼,第一種情況將不起作用,因爲有各種各樣的屬性(請參閱'demo /'中的'tlv')。第二個可能會工作,取決於'R.layout.touchlistview'的內容,如果最終將'TouchListView'添加到沿着該行的某個父容器中。 – CommonsWare

+0

謝謝。問題是我的grabber id是錯誤的:/順便說一句,有沒有辦法在列表中有不同大小的項目?我有一些多行條目,只要我移動一些東西,它們就會重新調整到單行。 – MasterScrat

+0

不是真的AFAIK。此代碼僅適用於AOSP音樂應用程序的某些內容,該應用程序沒有可變尺寸的行。當你拖着它時,有一種擴展行的概念 - 我只是更新了示例以更好地證明這一點。但是,我認爲代碼假定行的大小是相同的。 – CommonsWare

回答

1

問題可能是您沒有設置任何屬性,因爲您在null中傳遞。

默認情況下,控制刪除模式的變量設置爲-1,根據聲明屬性的xml文件,該變量等於none

private int mRemoveMode = -1; 

<attr name="remove_mode"> 
    <enum name="none" value="-1" /> 
    ... 
</attr> 

的文檔指出remove_mode=none意味着用戶不能刪除任何列表條目。

現在,據我所知,你不能創建一個AttributeSet而不使用XML。如果你真的不想使用任何 xml文件,那麼你應該修改TouchListView類,並添加必要的getter和setter。