簡體   English   中英

動態列表視圖Android

[英]Dynamic List View Android

我正在嘗試根據書名,作者或ISBN的搜索查詢來制作書籍的動態列表視圖。

我可以顯示一個項目,但是由於任何原因,我都看不到與搜索查詢匹配的其他任何項目。

主要方法

    // Set up search array
    int i = 0;
    String searchEntries[] = InventoryAdapter.getTitleAndAuthorByISBN(isbn);
    searchArray.add(new InventoryItem(searchQuery, searchEntries));


    // add data in custom adapter
    adapter = new CustomAdapter(this, R.layout.list, searchArray);
    ListView dataList = (ListView) findViewById(R.id.list);
    dataList.setAdapter(adapter);

CustomAdapter

public class CustomAdapter extends ArrayAdapter<InventoryItem> {
   Context context;
   int layoutResourceId;
   LinearLayout linearMain;
   ArrayList<InventoryItem> data = new ArrayList<InventoryItem>();

   public CustomAdapter(Context context, int layoutResourceId,
                 ArrayList<InventoryItem> data) {
          super(context, layoutResourceId, data);
          this.layoutResourceId = layoutResourceId;
          this.context = context;
          this.data = data;
   }

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

          if (row == null) {
                 LayoutInflater inflater = ((Activity) context).getLayoutInflater();
                 row = inflater.inflate(layoutResourceId, parent, false);

                 linearMain = (LinearLayout) row.findViewById(R.id.lineraMain);

                 InventoryItem myItem = data.get(position);
                 for (int j = 0; j < myItem.getDetails().length; j++) {
                       TextView label = new TextView(context);
                       label.setText(myItem.details[j]);
                       linearMain.addView(label);
                 }
          }

          return row;

   }

}

InventoryItem

public class InventoryItem {

   public String query;
   public String details[];

   public InventoryItem(String query, String[] details) {
          super();
          this.query = query;
          this.details = details;
   }
   public String getQuery() {
          return query;
   }
   public void setQuery(String query) {
          this.query = query;
   }
   public String[] getDetails() {
          return details;
   }
   public void setDetails(String[] details) {
          this.details = details;
   }

}

list.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/lineraMain"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:padding="10dp" >

</LinearLayout>

主要方法xml

<LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="95"
            android:orientation="vertical">


             <ScrollView  
                    android:layout_width="fill_parent" 
                    android:layout_height="fill_parent" 
                    android:overScrollMode="always" 
                    android:isScrollContainer="true" 
                    android:scrollbarAlwaysDrawVerticalTrack="true" 
                    android:scrollbarStyle="outsideInset" 
                    android:scrollbars="vertical">

                 <LinearLayout
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:orientation="vertical" >

                         <ListView
                              android:id="@+id/list"
                              android:layout_width="fill_parent"
                              android:layout_height="fill_parent">
                         </ListView>    

                </LinearLayout>

             </ScrollView>

    </LinearLayout>

有什么想法我做錯了嗎?

您在ScrollView有一個ListView 不建議不良設計。

http://developer.android.com/reference/android/widget/ScrollView.html

報價文件

永遠不要將ScrollView與ListView一起使用,因為ListView負責其自身的垂直滾動。 最重要的是,這樣做會挫敗ListView處理大型列表的所有重要優化,因為它有效地迫使ListView顯示其整個項目列表,以填充ScrollView提供的無限容器。

還要將getView更改為

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

      if (row == null) {
             LayoutInflater inflater = ((Activity) context).getLayoutInflater();
             row = inflater.inflate(layoutResourceId, parent, false);
             linearMain = (LinearLayout) row.findViewById(R.id.lineraMain);
             }

             InventoryItem myItem = data.get(position);
             TextView label = new TextView(context);
             label.setText(myItem.details[positon]);
             linearMain.addView(label);

      return row;

   }

編輯:

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

 </LinearLayout>

然后在getView

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

      if ( convertView== null) {
             LayoutInflater inflater = ((Activity) context).getLayoutInflater();
             convertView = inflater.inflate(layoutResourceId, parent, false);
             holder = ViewHolder();
             holder.tv = (TextView) convertView.findViewById(R.id.tv); 
             convertView.setTag(holder);  
       }
       else
       {
             holder = (ViewHolder) convertView.getTag();  
       } 

             InventoryItem myItem = data.get(position);
             holder.tv.setText(myItem.details[positon]);


      return convertView;

   }

   static class ViewHolder
   {
         TextView tv;
   } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM