2009-12-29 27 views
0

我有一個列表活動4,我已經擴展了BaseAdapter和getview看起來像這樣...ListActivity不滾動

public View getView(int position, View convertView, ViewGroup parent) { 
      View row=null; 
      for(int i=0;i<10;) 
      { 
      row = convertView; 
      if(row==null) 
      { 
       LayoutInflater inflater = mContext.getLayoutInflater(); 
       row = inflater.inflate(R.layout.parsed,null); 
      } 
      TextView id = (TextView)row.findViewById(R.id.id); 
      id.setText(idvector.elementAt(position)); 
      TextView photo = (TextView)row.findViewById(R.id.photo); 
      photo.setText(photovector.elementAt(position)); 
      TextView subcategory = (TextView)row.findViewById(R.id.subcategory); 
      subcategory.setText(subcategoryvector.elementAt(position)); 
      TextView name = (TextView)row.findViewById(R.id.name); 
      name.setText(namevector.elementAt(position)); 
      } 
      return(row); 
     } 

    } 

我現在的問題是,名單沒有給矢量的所有值也不是滾動..如何使我的列表可滾動?

回答

0

對不起你們......非常非常抱歉......如此愚蠢的我...我沒有改變如下代碼...對不起你們4浪費了大量的˚FUR寶貴的時間......

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

感謝名單了很多坡道......我要去實現ü顯示的程序...

+0

沒問題,很高興我能幫到你。問候! – Ramps 2009-12-29 13:39:10

0

我不確定,但似乎你沒有把物品放到你的適配器上。在你的代碼snipet中,你從不同的向量(idvector,subcategoryvector等)中檢索元素。可能您應該創建一個代表項目類型的類,並保留所需的所有內容 - id,子類別,照片)並將該項添加到適配器中。
請檢查您的適配器的大小。

還有一件事。看來代碼中的「for」循環是不需要的。

問候!

好的,這裏有一些例子。 RowData是我的項目的一個類。正如你可以看到我的自定義適配器擴展ArrayAdapter <RowData>我可以通過調用adapter.add(rowInstance)來放新的項目。


public class CustomList extends ListActivity { 
private LayoutInflater mInflater; 
private Vector data; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main);   
    mInflater = (LayoutInflater) getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
    data = new Vector(); 
    RowData rd = new RowData("item1", "description1"); 
    data.add(rd); 
    rd = new RowData("item2", "description2"); 
    data.add(rd); 
    rd = new RowData("item2", "description3"); 
    data.add(rd); 

    CustomAdapter adapter = new CustomAdapter(this, R.layout.custom_row,R.id.item, data); 
    setListAdapter(adapter);   
    getListView().setTextFilterEnabled(true); 
} 


public void onListItemClick(ListView parent, View v, int position, long id) { 
    CustomAdapter adapter = (CustomAdapter) parent.getAdapter(); 
     RowData row = adapter.getItem(position);     
    Builder builder = new AlertDialog.Builder(this); 
    builder.setTitle(row.mItem); 
    builder.setMessage(row.mDescription + " -> " + position); 
    builder.setPositiveButton("ok", null); 
    builder.show(); 
} 

/** 
* Data type used for custom adapter. Single item of the adapter.  
*/ 
private class RowData { 
    protected String mItem; 
     protected String mDescription; 

     RowData(String item, String description){ 
     mItem = item; 
     mDescription = description;    
    } 

     @Override 
     public String toString() { 
       return mItem + " " + mDescription; 
     } 
} 

private class CustomAdapter extends ArrayAdapter <RowData> { 

     public CustomAdapter(Context context, int resource, 
         int textViewResourceId, List objects) { 
       super(context, resource, textViewResourceId, objects); 

     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
       ViewHolder holder = null; 

       //widgets displayed by each item in your list 
       TextView item = null; 
       TextView description = null; 

       //data from your adapter 
       RowData rowData= getItem(position); 


       //we want to reuse already constructed row views... 
       if(null == convertView){ 
         convertView = mInflater.inflate(R.layout.custom_row, null); 
         holder = new ViewHolder(convertView); 
         convertView.setTag(holder); 
       } 
       // 
       holder = (ViewHolder) convertView.getTag(); 
       item = holder.getItem(); 
       item.setText(rowData.mItem); 

       description = holder.getDescription();   
       description.setText(rowData.mDescription); 

       return convertView; 
     } 
} 

/** 
* Wrapper for row data. 
* 
*/ 
private class ViewHolder {  
    private View mRow; 
    private TextView description = null; 
    private TextView item = null; 

     public ViewHolder(View row) { 
     mRow = row; 
     } 

     public TextView getDescription() { 
       if(null == description){ 
         description = (TextView) mRow.findViewById(R.id.description); 
       } 
       return description; 
     } 

     public TextView getItem() { 
       if(null == item){ 
         item = (TextView) mRow.findViewById(R.id.item); 
       } 
       return item; 
     }  
} 
+0

感謝名單坡道...但我完全沒有得到笏ü說......我的意思是我怎麼能容納一切在課堂上,並將它們傳遞給baseadapter?一個簡單的示例代碼將非常有用 關心! – JaVadid 2009-12-29 12:56:06

+0

以及我刪除了「for」循環,但沒有變化是可見的...只有4行在屏幕上繪製,而其他人不顯示...實際上應該有8羅嗦...不知道笏正在創造問題.. – JaVadid 2009-12-29 13:00:53

+0

好吧,我將準備一個簡單的代碼示例...稍等片刻:) – Ramps 2009-12-29 13:16:19

-2

您的意思是,如果您的ListView內容大於您顯示的區域,您希望它滾動嗎?如果是這樣,圍繞你想滾動的東西添加一個ScrollView。

// inside of the parent layout(most likely a Linear Layout) 
<ScrollView android:layout_height="wrap_content" 
      android:id="@+id/ScrollView01" 
      android:layout_width="wrap_content" 
      android:scrollbarAlwaysDrawHorizontalTrack="false" 
      android:scrollbars="vertical"> 

     <RelativeLayout android:id="@+id/RelativeLayout01" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content"> 

      <ListView android:id="@id/android:list" 
         android:layout_width="wrap_content" 
         android:layout_height="380dip" 
         android:layout_marginLeft="20dip" 
         android:layout_marginRight="20dip" 
         android:layout_marginTop="130dip" />  
     </RelativeLayout> 
</ScrollView> 
+1

不,你不應該把一個ListView放在一個ScrollView中; ListView已經處理滾動了......你將最終陷入一種奇怪的情況,在這種情況下,視圖會對誰處理用戶的滾動事件感到困惑。 – 2009-12-29 13:17:17

+0

我發誓我沒有試過它,它沒有滾動,這就是爲什麼我使用ScrollView。剛回去再試一遍,它自己滾動。猜猜我第一次錯過了什麼。 – 2009-12-29 13:20:18

1

getView方法是爲了膨脹,填充和返回單個列表行。

所有你應該需要做的是:

public View getView(int position, View convertView, ViewGroup parent) { 
    // Inflate the individual row from the 'parsed' layout 
    View row = mInflater.inflate(R.layout.parsed); 

    // Set the properties on the inflated row 
    TextView id = (TextView) row.findViewById(R.id.id); 
    id.setText(idvector.elementAt(position)); 
    TextView photo = (TextView) row.findViewById(R.id.photo); 
    photo.setText(photovector.elementAt(position)); 
    TextView subcategory = (TextView) row.findViewById(R.id.subcategory); 
    subcategory.setText(subcategoryvector.elementAt(position)); 
    TextView name = (TextView) row.findViewById(R.id.name); 
    name.setText(namevector.elementAt(position)); 

    return row; 
} 

什麼坡道說的話是不是創建BaseAdapter並通過四個不同的載體,你可以創建Photo對象的一個​​向量(或目錄) (或不管你代表什麼),每個都有id,photo,subcategoryname成員變量。即讓事情更具針對性! :)

至於列表不滾動;只有當列表中的項目數量超過可用的屏幕空間時纔會滾動。如果您的列表中只顯示四個項目,則不會滾動。

你還應該檢查你是如何調用BaseAdapter超級方法的(假設你正在擴展ArrayAdapter):你在傳遞數據的矢量還是其他數據結構?如果基礎適配器沒有您想要渲染的正確信息,則不會渲染它! :)