2012-06-29 163 views
0

我有一個問題,我通過代碼動態地在LinearLayout中添加列表視圖,並將EndlessAdapter設置爲該數據顯示正確,但我們無法從列表中的頂部滾動到底部。我不知道爲什麼?請給我建議任何解決方案。無法滾動列表視圖android

代碼:

public void setValuesInCategoryChild(String url, final String filter, 
      final String from, final String to) { 
     if (isOnline()) { 
      final ProgressDialog dialog = ProgressDialog.show(
        ResearchList.this, "Research List  ", 
        "Please wait... ", true); 

      final Handler handler = new Handler() { 

       public void handleMessage(Message msg) { 

        // System.out.println("The id after Save:"+id.get(0).toString()); 

        // catagory.addAll(keyword_vector1); 
        linear_Category_Child.setVisibility(View.GONE); 
        linear_Category_Child_Child.setVisibility(View.VISIBLE); 
        // tv_Child_Header.setText("Volvo"); 
        tv_CategoryChildHeader.setText(from); 
        setHeaderImage(tv_CategoryChildHeader.getText().toString()); 
        System.out.println("The size of Cat Display names:" 
          + coll.getDisplayNames().size()); 
        System.out.println("The size of Cat Images:" 
          + coll.getImages().size()); 
        System.out.println("The size of Cat price:" 
          + coll.getPrice().size()); 
        System.out.println("The size of Cat Year:" 
          + coll.getYears().size()); 
        System.out.println("The size of Cat Rating:" 
          + coll.getRating().size()); 
        System.out.println("The size of Cat Mpg:" 
          + coll.getMpg().size()); 
        setHeaderImage(tv_CategoryChildHeader.getText().toString()); 
        if(coll.getDisplayNames().size()!=0) 
        { 
         lvCategory = new ListView(ResearchList.this); 
         LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
           LayoutParams.FILL_PARENT, 
           LayoutParams.FILL_PARENT); 

         lvCategory.setLayoutParams(params); 

        // Adapter for MPG Search 
        demoAdapterCat = new DemoAdapterCat(); 
        lvCategory.setAdapter(demoAdapterCat); 
        layout_ResearchList_BrandList.addView(lvCategory); 
        Utility.setListViewHeightBasedOnChildren(lvCategory); 
        } 
        else 
        { 
         /*lvCategory.invalidate(); 
         lvCategory.setAdapter(null);*/ 
         AlertDialog.Builder builder = new Builder(ResearchList.this); 
         builder.setTitle("Attention!"); 
         builder.setMessage("No Data Available for the Particular Search."); 
         builder.setPositiveButton("OK", 
           new DialogInterface.OnClickListener() { 

            @Override 
            public void onClick(DialogInterface dialog, int which) { 
             // TODO Auto-generated method stub 

            } 
           }); 

         builder.create().show(); 
        } 
        /*Utility util = new Utility(); 
        util.setListViewHeightBasedOnChildren(lvCategory);*/ 
        dialog.dismiss(); 
       } 
      }; 

      final Thread checkUpdate = new Thread() { 

       public void run() { 
        try { 
         String sortEncode = URLEncoder.encode("mpg"); 
         String filterEncode = URLEncoder.encode(filter); 
         String clientEncode = URLEncoder.encode("10030812"); 
         String fromEncode = URLEncoder.encode(from); 
         String toEncode = URLEncoder.encode(to); 
         String catUrl = "/v1/vehicles/get-make-models.json?sort=" 
           + sortEncode 
           + "&filter=" 
           + filterEncode 
           + "&client-id=" 
           + clientEncode 
           + "&from=" 
           + fromEncode; 
         genSig = new GetSignature(catUrl, "acura"); 
         try { 
          signature = genSig.getUrlFromString(); 
         } catch (InvalidKeyException e1) { 
          // TODO Auto-generated catch block 
          e1.printStackTrace(); 
         } catch (NoSuchAlgorithmException e1) { 
          // TODO Auto-generated catch block 
          e1.printStackTrace(); 
         } 
         // jsonString = 
         // getJsonSring("http://api.highgearmedia.com/v1/vehicles/get-models.json?make=acura&client-id=10030812&signature=LWQbdAlJVxlXZ1VO2mfqAA=="); 
         // String signatureEncode = 
         // URLEncoder.encode(signature); 
         String urlEncode = URLEncoder.encode(catUrl 
           + "&signature=" + signature); 
         jsonString = getJsonSring("http://apibeta.highgearmedia.com" 
           + catUrl + "&signature=" + signature); 
         System.out.println("The json category:===>" 
           + jsonString); 
        } catch (ClientProtocolException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } catch (URISyntaxException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } catch (IOException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
        JsonParse json = new JsonParse(jsonString); 
        json.parseCat(); 
        LIST_SIZE = coll.getDisplayNames().size(); 
        for (int i = 0; i <= BATCH_SIZE; i++) { 
         // countriesSub.add(COUNTRIES[i]); 
         countriesSubCat.add(coll.getDisplayNames().get(i)); 
         imagesSubCat.add(coll.getImages().get(i)); 
         YearSubCat1.add(coll.getYears().get(i)); 
         YearSubCat2.add(coll.getYears().get(i + 1)); 
         mpgSubCat1.add(coll.getMpg().get(i)); 
         mpgSubCat2.add(coll.getMpg().get(i + 1)); 
         priceSubCat1.add(coll.getPrice().get(i)); 
         priceSubCat2.add(coll.getPrice().get(i + 1)); 
         ratingSubCat1.add(coll.getRating().get(i)); 
         ratingSubCat2.add(coll.getRating().get(i + 1)); 
        } 
        setLastOffset(BATCH_SIZE); 
        handler.sendEmptyMessage(0); 

       } 

      }; 
      checkUpdate.start(); 
     } else { 
      AlertDialog.Builder builder = new Builder(ResearchList.this); 
      builder.setTitle("Attention!"); 
      builder.setMessage("Network Connection unavailable."); 
      builder.setPositiveButton("OK", 
        new DialogInterface.OnClickListener() { 

         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          // TODO Auto-generated method stub 

         } 
        }); 

      builder.create().show(); 
     } 

    } 

佈局:

<LinearLayout 
       android:id="@+id/linear_ResearchListCategoryChild_Child" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:orientation="vertical" 
       android:visibility="gone" > 

       <RelativeLayout 
        android:id="@+id/linear_ResearchListCategoryChild_Child_HeaderBlock" 
        android:layout_width="fill_parent" 
        android:layout_height="40dip" 
        android:background="@drawable/catagory_bar" 
        android:orientation="horizontal" > 

        <TextView 
         android:id="@+id/tv_ResearchListCategoryChild_Child_Header" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_centerVertical="true" 
         android:text="Work in Progress" 
         android:textColor="#ffffff" 
         android:textStyle="bold" android:layout_marginLeft="60dip"/> 

        <ImageView 
         android:id="@+id/img_ResearchListCategory_ChildHeader" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_alignParentLeft="true" 
         android:layout_centerVertical="true" 
         android:layout_marginLeft="10dip" 
         android:src="@drawable/up_arrow" /> 

        <ImageView 
         android:id="@+id/imageView2" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_alignParentRight="true" 
         android:layout_centerVertical="true" 
         android:layout_marginRight="10dp" 
         android:src="@drawable/list_arrow_up" /> 

       </RelativeLayout> 

       <RelativeLayout 
        android:id="@+id/linear_ResearchListCategoryChild_Child_Header" 
        android:layout_width="fill_parent" 
        android:layout_height="40dip" 
        android:background="@drawable/nav_bg" 
        android:orientation="horizontal" > 

        <TextView 
         android:id="@+id/textView5" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_alignParentLeft="true" 
         android:layout_centerVertical="true" 
         android:layout_marginLeft="5dip" 
         android:clickable="true" 
         android:text="Highest Rated" 
         android:textColor="#ffffff" 
         android:textStyle="bold" android:gravity="center"/> 

        <TextView 
         android:id="@+id/textView6" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_alignBaseline="@+id/textView5" 
         android:layout_alignBottom="@+id/textView5" 
         android:layout_marginLeft="30dp" 
         android:layout_toRightOf="@+id/textView5" 
         android:clickable="true" 
         android:text="A-Z" 
         android:textColor="#ffffff" 
         android:textStyle="bold" android:gravity="center"/> 

        <TextView 
         android:id="@+id/textView7" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_alignBaseline="@+id/textView6" 
         android:layout_alignBottom="@+id/textView6" 
         android:layout_marginLeft="40dp" 
         android:layout_toRightOf="@+id/textView6" 
         android:clickable="true" 
         android:text="Price" 
         android:textColor="#ffffff" 
         android:textStyle="bold" android:gravity="center"/> 

        <TextView 
         android:id="@+id/textView8" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_alignBaseline="@+id/textView7" 
         android:layout_alignBottom="@+id/textView7" 
         android:layout_alignParentRight="true" 
         android:layout_marginRight="14dp" 
         android:clickable="true" 
         android:text="MPG" 
         android:textColor="#ffffff" 
         android:textStyle="bold" android:gravity="center"/> 
       </RelativeLayout> 

       <!-- 
       <RelativeLayout 
        android:id="@+id/relative_down_arrow" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:visibility="visible" 
        > 

       </RelativeLayout> 

       --> 

       <LinearLayout 
        android:id="@+id/linearArrowLayout" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:orientation="horizontal" 
        android:visibility="visible"> 

        <ImageView 
         android:id="@+id/Highly_rated" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_marginLeft="51dp" 
         android:src="@drawable/selector_arrow" 
         android:visibility="invisible" /> 

        <ImageView 
         android:id="@+id/AZ_arrow" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_marginLeft="78dp" 
         android:src="@drawable/selector_arrow" 
         android:visibility="invisible" /> 

        <ImageView 
         android:id="@+id/Price_arrow" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_marginLeft="59dp" 
         android:src="@drawable/selector_arrow" 
         android:visibility="invisible" /> 

        <ImageView 
         android:id="@+id/MPG" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_marginLeft="55dp" 
         android:src="@drawable/selector_arrow" 
         android:visibility="invisible" /> 
       </LinearLayout> 
       <LinearLayout 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:layout_marginLeft="12dip" 
        android:layout_marginRight="12dip" android:background="#ffffff" android:id="@+id/layout_ResearchList_BrandList"> 
       </LinearLayout> 
      </LinearLayout> 

DemoAdapterCat:(編者)

class DemoAdapterCat extends EndlessAdapter { 
     ImageLoader image = new ImageLoader(ResearchList.this); 
     private RotateAnimation rotate = null; 
     ArrayList<String> tempListNamesCat = new ArrayList<String>(); 
     ArrayList<String> tempListImagesCat = new ArrayList<String>(); 
     ArrayList<String> tempListYearCat1 = new ArrayList<String>(); 
     ArrayList<String> tempListYearCat2 = new ArrayList<String>(); 
     ArrayList<String> tempListmpgCat1 = new ArrayList<String>(); 
     ArrayList<String> tempListmpgCat2 = new ArrayList<String>(); 
     ArrayList<String> tempListpriceCat1 = new ArrayList<String>(); 
     ArrayList<String> tempListpriceCat2 = new ArrayList<String>(); 
     ArrayList<String> tempListRatingCat1 = new ArrayList<String>(); 
     ArrayList<String> tempListRatingCat2 = new ArrayList<String>(); 

     DemoAdapterCat() { 
      super(new CategoryListLazyAdapter(ResearchList.this, 
        countriesSubCat, imagesSubCat, YearSubCat1, YearSubCat2, 
        mpgSubCat1, mpgSubCat2, priceSubCat1, priceSubCat2, 
        ratingSubCat1, ratingSubCat2)); 
      /*Utility util = new Utility(); 
      util.setListViewHeightBasedOnChildren(lvCategory);*/ 
      rotate = new RotateAnimation(0f, 360f, Animation.RELATIVE_TO_SELF, 
        0.5f, Animation.RELATIVE_TO_SELF, 0.5f); 
      rotate.setDuration(600); 
      rotate.setRepeatMode(Animation.RESTART); 
      rotate.setRepeatCount(Animation.INFINITE); 
     } 

     /* 
     * @Override public int getCount() { return 
     * brandList.getDisplayNames().size(); //return count+=10; } 
     */ 
     @Override 
     protected View getPendingView(ViewGroup parent) { 
      row = getLayoutInflater().inflate(R.layout.categorylist, null); 

      child = row.findViewById(R.id.tv_CategoryItem_Name); 
      child.setVisibility(View.GONE); 
      child = row.findViewById(R.id.tv_CategoryItem_MPG1); 
      child.setVisibility(View.GONE); 
      child = row.findViewById(R.id.tv_CategoryItem_MPG2); 
      child.setVisibility(View.GONE); 
      child = row.findViewById(R.id.tv_CategoryItem_Price1); 
      child.setVisibility(View.GONE); 
      child = row.findViewById(R.id.tv_CategoryItem_Price2); 
      child.setVisibility(View.GONE); 
      child = row.findViewById(R.id.tv_CategoryItem_Rating1); 
      child.setVisibility(View.GONE); 
      child = row.findViewById(R.id.tv_CategoryItem_Rating2); 
      child.setVisibility(View.GONE); 
      child = row.findViewById(R.id.tv_CategoryItem_Year1); 
      child.setVisibility(View.GONE); 
      child = row.findViewById(R.id.tv_CategoryItem_Year2); 
      child.setVisibility(View.GONE); 
      child = row.findViewById(R.id.linear_CategoryList_itemlayer1); 
      child.setVisibility(View.GONE); 
      child = row.findViewById(R.id.linear_CategoryList_itemlayer2); 
      child.setVisibility(View.GONE); 
      /* 
      * child = row.findViewById(R.id.img_CategoryItem); 
      * child.setVisibility(View.GONE); child = 
      * row.findViewById(R.id.img_CategoryItem_Arrow); 
      * child.setVisibility(View.GONE); 
      */ 

      /* 
      * child = row.findViewById(R.id.linear_main_MPG); 
      * child.setVisibility(View.GONE); 
      */ 
      child = row.findViewById(R.id.throbber); 
      child.setVisibility(View.VISIBLE); 
      child.startAnimation(rotate); 

      return (row); 
     } 

     @Override 
     protected boolean cacheInBackground() { 
      //count += 10; 
      SystemClock.sleep(100000); 
      tempListNamesCat.clear(); 
      tempListImagesCat.clear(); 
      tempListmpgCat1.clear(); 
      tempListmpgCat2.clear(); 
      tempListpriceCat1.clear(); 
      tempListpriceCat2.clear(); 
      tempListYearCat1.clear(); 
      tempListYearCat2.clear(); 
      tempListRatingCat1.clear(); 
      tempListRatingCat2.clear(); 
//   countriesSubCat.clear(); 
//   imagesSubCat.clear(); 
//   YearSubCat1.clear(); 
//   YearSubCat2.clear(); 
//   mpgSubCat1.clear(); 
//   mpgSubCat2.clear(); 
//   priceSubCat1.clear(); 
//   priceSubCat2.clear(); 
//   ratingSubCat1.clear(); 
//   ratingSubCat2.clear(); 

      int lastOffset = getLastOffset(); 
      if (lastOffset < LIST_SIZE) { 
       int limit = lastOffset + BATCH_SIZE; 
       for (int i = (lastOffset + 1); (i <= limit && i < LIST_SIZE); i++) { 
        tempListNamesCat.add(coll.getDisplayNames().get(i)); 
        tempListImagesCat.add(coll.getImages().get(i)); 
        tempListmpgCat1.add(coll.getMpg().get(i)); 
        tempListmpgCat2.add(coll.getMpg().get(i + 1)); 
        tempListpriceCat1.add(coll.getPrice().get(i)); 
        tempListpriceCat2.add(coll.getPrice().get(i + 1)); 
        tempListRatingCat1.add(coll.getRating().get(i)); 
        tempListRatingCat2.add(coll.getRating().get(i + 1)); 
        tempListYearCat1.add(coll.getYears().get(i)); 
        tempListYearCat2.add(coll.getYears().get(i + 1)); 
       } 

       setLastOffset(limit); 

       if (limit < LIST_SIZE) { 
        // return true; 
        return (getWrappedAdapter().getCount() < coll 
          .getDisplayNames().size()); 
       } else { 
        return false; 
       } 
      } else { 
       return false; 
      } 
     } 

     @Override 
     protected void appendCachedData() { 

      @SuppressWarnings("unchecked") 
      // Activity activity = this; 
      // ArrayAdapter<String> arrAdapterNew = 
      // (ArrayAdapter<String>)getWrappedAdapter(); 
      CategoryListLazyAdapter arrAdapterNewCategory = (CategoryListLazyAdapter) getWrappedAdapter(); 
      // int listLen = tempList.size(); 
      // int listLen = tempListNames.size(); 
      countriesSubCat.addAll(tempListNamesCat); 
      imagesSubCat.addAll(tempListImagesCat); 
      mpgSubCat1.addAll(tempListmpgCat1); 
      mpgSubCat2.addAll(tempListmpgCat2); 
      priceSubCat1.addAll(tempListpriceCat1); 
      priceSubCat2.addAll(tempListpriceCat2); 
      ratingSubCat1.addAll(tempListRatingCat1); 
      ratingSubCat2.addAll(tempListRatingCat2); 
      YearSubCat1.addAll(tempListYearCat1); 
      YearSubCat2.addAll(tempListYearCat2); 
      arrAdapterNewCategory.notifyDataSetChanged(); 
      /*Utility util = new Utility(); 
      util.setListViewHeightBasedOnChildren(lvCategory);*/ 
      /* 
      * for(int i=0; i<listLen; i++){ // 
      * arrAdapterNew.add(tempList.get(i)); } 
      */ 
     } 
    } 

預先感謝。

+0

你在哪裏添加值到'demoAdapterCat'? – Jeshurun

+0

請參閱DemoAdapterCat EndlessAdapter的問題的已編輯部分。 –

回答

0

您需要設置機器人:nestedScrollingEnabled = 「真」其XML聲明 OR 通過顯式調用setNestedScrollingEnabled(真)

檢查:https://stackoverflow.com/a/6211286