2011-05-08 84 views
3

覆蓋我的getview方法時,我不斷收到錯誤。這是我有:覆蓋getView()的問題()

公共類UnwatchedEpisodesActivity擴展ListActivity {

private String[] values = new String[]{"Row 1", "Row 2", "Row 3"}; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.episode_main); 
    setListAdapter(new EpisodeListAdapter()); 

} 

private class EpisodeListAdapter extends ArrayAdapter<String>{ 

    private LayoutInflater li = LayoutInflater.from(this.getContext()); 

    public EpisodeListAdapter(){ 
     super(UnwatchedEpisodesActivity.this, 0, values); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if(convertView == null){ 
      convertView = li.inflate(R.layout.episode_row, parent, false); 
     } 

     ((TextView) convertView.findViewById(R.id.text1)).setText(values[position]); 
     return convertView; 
    } 

} 

和我的XML是這樣的:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout android:id="@+id/ep_layout" 
    android:layout_width="fill_parent" android:layout_height="fill_parent" 
    android:orientation="vertical" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <TextView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" android:layout_height="wrap_content" 
     android:id="@android:id/text1" /> 
</LinearLayout> 

(我也試過沒有的LinearLayout,這都沒有區別) 我得到this error.

你們有什麼想法嗎?

另外一個問題: 如果我想分開組中的值,該怎麼辦?我想要一個列表來顯示類似於:

----------- 
first part 
----------- 
Row 1 
Row 2 
----------- 
second part 
----------- 
Row 3 

顯然這只是一個例子;基本上我想知道如何添加這些「分隔符」

回答

1

使用android:id="@+id/text1"而不是 android:id =「@ android:id/text1」爲第一部分。

對於第2個問題,據我瞭解你的需求:

你應該誇大在getView()方法不同位置不同的XML。 例如:

if (position == 0) { 
    convertView = li.inflate(R.layout.episode_row, parent, false); 
    //fetch the text view and other things and set their value 
    return convertView; 
} else if (position == 1) { 
    //similarly do here also and return convertview 
} 

希望這將有助於解決您的問題。

+0

getView()是爲陣列的每個位置循環的嗎?如果是這樣,我可以看到這個工作,而且看起來很簡單.. – networkprofile 2011-05-08 15:13:06

+0

是的,getView()循環每個位置,這很容易做到,你可以根據你的需要定製它。一切順利...... :) – 2011-05-08 15:22:05

+0

請注意,儘管此解決方案可應用於平面數據結構,但您需要將標題值插入到劇集列表中,或者您必須能夠確定每個部分的第一集。位置= 0適用於第一個項目,並且在上面的if子句中,它顯示標題而不是第一個iem!對於分層數據結構,ExpandableListView是解決方案。 – rekaszeru 2011-05-09 05:48:47

3

你應該

android:id="@+id/text1" 

這部分設置你的TextView的ID:android:id="@android:id/text1"是不正確!

對於分離您的物品,您應該使用ExpandableListActivity而不是ListActivity,其中您的組將是部件(第一,第二等),並且子列表將是您當前的values

在這種情況下,您應該使用BaseExpandableListAdapter填充您的視圖。
雖然有幾種方法需要重寫,但如果使用正確的數據結構,它不會成爲問題。你可以參考例如this example

那麼你getView方法體應該把BaseExpandableListAdaptergetChildView方法中,你應該在getGroupView清除使用的其他TextView或更復雜的佈局部分。

通過這種方式,您可以將您的劇集分爲幾部分。

+0

這似乎是問題所在。謝謝!另外:你對我的第二個問題有什麼想法嗎? – networkprofile 2011-05-08 14:44:41

+0

請參閱我的解決方案更新,將您的劇集分爲幾部分。 – rekaszeru 2011-05-08 14:55:03