2016-04-18 18 views
0

Am einen Basisadapter verwenden, die die untergeordneten Ansichten für das Raster erstellen und die Halter Ansicht mehr als ein anklickbares Steuerelement jeweils eine Aktion ausführen .GridView mit Basis-Adapter reagiert nicht auf den ersten Klick auf das erste Element in der GridView, bis ich blättern

hier ist die getView() -Methode Code

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; 
    } 

wenn der Gridview zuerst initialisieren, wenn ich in dem Halter auf jede Kontrolle auf dem ersten Punkt klicken sieht es wird nicht antworten, bis ich das Gridview scrollen Hinweis leicht,: nur der erste Klick auf das erste Element beim ersten Öffnen der App, die restlichen Klicks sind in Ordnung und verwenden LazyLoading, um Bilder in die ImageView in der Halteransicht zu laden, und die Scrollleistung ist auch auf langsamen Geräten großartig, daher ist es keine Gedächtnisstütze Ich vermute. Vielen Dank im Voraus für jede Hilfe.

Antwort

0

entfernen Sie unter Linie von getView() -Methode und versuchen Sie es;

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

den unten klicken listner fügen Sie es außerhalb anderem Teil des Codes und versucht,

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

es hat nicht funktioniert und ich bearbeiten nun meine Frage, weil ich, dass nur die erste Punkt im Netz entdeckt hat Dieses Verhalten, fühlen Sie sich frei, Ihre Antwort zu bearbeiten, wenn Sie es jetzt –

+0

Ich hatte den Code bearbeiten werden Sie bitte versuchen Sie es mit. –

+0

es dint arbeiten und wie Sie sehen holderGridView.BookItemWraper haben unterschiedliche onClickListener je nach dem Stand des Buches, so kann ich es nicht aus dem else entfernen, obwohl ich es versuchte und nicht funktioniert. Trotzdem danke –