2016-04-18 5 views
0

。 GridViewコントロールは、最初のiは、ホルダー内の任意のコントロールに最初の項目をクリックすると、初期化、私は少しのGridViewをスクロールするまで、それは文句を言わない対応ノートを表示したときに、ここで グリッドの子ビューを作成するベースアダプタを使用し、ホルダービューに2つ以上のクリック可能なコントロールがあり、それぞれがアクションを実行すると、ベースアダプタがグリッドビューの最初のアイテムを最初にクリックしたときにGridViewの最初のアイテムにスクロールするまで応答しない

はgetViewメソッド()メソッドのコード

public View getView(final int position, View convertView, ViewGroup parent) { 
     if (convertView == null) { 

      inflater = (LayoutInflater) mContext 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = inflater.inflate(R.layout.book_item_to_download, parent, false); 
      convertView.setFocusable(true); 
      convertView.setClickable(true); 

      holderGridView = new BooksViewHolder(); 

      holderGridView.BookImage = (ImageView) convertView.findViewById(R.id.bookBackground); 
      holderGridView.BookName = (TextView) convertView.findViewById(R.id.bookName); 
      holderGridView.BookItemWraper = (LinearLayout) convertView.findViewById(R.id.book_item_wraper); 
      holderGridView.BookDownload=(ImageView) convertView.findViewById(R.id.download); 
      holderGridView.BookProgress=(CircularProgressBar) convertView.findViewById(R.id.demo_mpc); 

      Typeface custom_font = Typeface.createFromAsset(getActivity().getAssets(), "fonts/Isra-Thin.ttf"); 
      holderGridView.BookName.setTypeface(custom_font); 
      convertView.setTag(holderGridView); 
     } else { 
      holderGridView = (BooksViewHolder) convertView.getTag(); 
     } 

     holderGridView.BookItemWraper.setLayoutParams(new android.widget.AbsListView.LayoutParams((int) Math.round(ScreenWidth/2.1), (int) Math.round(ScreenHeight/2.5))); 
     holderGridView.BookImage.setImageDrawable(getResources().getDrawable(R.drawable.book_background)); 
     holderGridView.BookName.setText(bookCovers.get(position).getBookTitle()); 

     ImageView image = holderGridView.BookImage; 

     //DisplayImage function from ImageLoader Class 
     imageLoader.DisplayImage(bookCovers.get(position).getBookImageURL(), image); 

      if(bookCovers.get(position).isDownloaded) 
      { 
       holderGridView.BookDownload.setVisibility(View.GONE); 
       holderGridView.BookProgress.setVisibility(View.GONE); 
       holderGridView.BookItemWraper.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         for(int i=0;i<app.bis.size();++i) 
         { 
          if(app.bis.get(i).identifier.equals(bookCovers.get(position).getBookID()+"")) 
          { 
           openBookViewer(app.bis.get(i)); 
           break; 
          } 
         } 
        } 
       }); 
      } 
      else if(bookCovers.get(position).isDownloading) 
      { 
       holderGridView.BookDownload.setVisibility(View.GONE); 
       holderGridView.BookProgress.setVisibility(View.VISIBLE); 
       holderGridView.BookProgress.setProgress(bookCovers.get(position).downloadProgress); 
       holderGridView.BookItemWraper.setOnClickListener(null); 
      } 
      else { 
       holderGridView.BookDownload.setVisibility(View.VISIBLE); 
       holderGridView.BookProgress.setVisibility(View.GONE); 

       holderGridView.BookItemWraper.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         Intent openDetails = new Intent(getActivity(), WaitingBookDetails_Activity.class); 
         openDetails.putExtra(Constants.BOOK_COVER, Parcels.wrap(bookCovers.get(position))); 
         startActivity(openDetails); 
        } 
       }); 

       holderGridView.BookDownload.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         new downloadEPUB_Task(bookCovers.get(position), position).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 
        } 
       }); 
      } 

     return convertView; 
    } 

です:のみ当初アプリケーションが最初にクリックされたときの最初のクリックは残りのクリックよりもうまくいき、LazyLoadingを使用してImageViewにホルダービューで画像を読み込み、スローなデバイスでもスクロールのパフォーマンスは素晴らしいです私は推測する。 ご協力いただきありがとうございます。

答えて

0

getView()メソッドから以下の行を削除して試してください。

convertView.setFocusable(true); 
convertView.setClickable(true); 

は、以下のクリックのリスナーコードの他の外側の部分を追加し、それを試して、

holderGridView.BookItemWraper.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Intent openDetails = new Intent(getActivity(), WaitingBookDetails_Activity.class); 
        openDetails.putExtra(Constants.BOOK_COVER, Parcels.wrap(bookCovers.get(position))); 
        startActivity(openDetails); 
       } 
      }); 

      holderGridView.BookDownload.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        new downloadEPUB_Task(bookCovers.get(position), position).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 
       } 
      }); 
+0

それは動作しませんでしたし、私は、グリッド内の唯一の最初の項目がないことを発見したので、私は今、私の質問を編集しましたこの動作は、あなたが今それを –

+0

私はあなたがそれを試してみてくださいコードを編集していた場合は、あなたの答えを編集して自由に感じてください。 –

+0

それはうまくいきませんし、私はholdGridView.BookItemWraperが本の状態に応じて異なるonClickListenerを持っているので、私はそれを試しても動作しませんでした。とにかくありがとう –

関連する問題