2012-08-13 10 views
6

Cierpię z jednym problemem od 2 dni. Mam widok siatki w tym, że muszę wyświetlać obrazy. Kiedy klikam na element siatki, musi przejść do następnej aktywności. Jestem w stanie wyświetlaj obrazy w widoku siatki, ale chodzi o to, że gdy kliknę na ten element, to nie odpowiada. (OnItemClickListener nie działa). Nie mogłem prześledzić mojego problemu, w którym popełniłem błąd.GridView.setOnItemClickListener nie działa

  package com.logictreeit.mobilezop.fragments; 

    import android.app.Activity; 
    import android.content.Context; 
    import android.os.Bundle; 
    import android.support.v4.app.Fragment; 
    import android.util.Log; 
    import android.view.LayoutInflater; 
    import android.view.View; 
    import android.view.ViewGroup; 
    import android.widget.AdapterView; 
    import android.widget.AdapterView.OnItemClickListener; 
    import android.widget.GridView; 

    import com.logictreeit.mobilezop.adapters.PhotoAdapter; 
    import com.logictreeit.mobilezop.custom.Utils; 

     public class Dup_AlbumPhotosFragment extends Fragment implements 
       OnItemClickListener { 

private static final String TAG = "AlbumPhotos Fragment"; 
private GridView gridView; 
private Context mContext; 
private PhotoAdapter photoAdapter; 

public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    Log.v(TAG, "on Activity Created "); 

} 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    this.mContext = activity; 
} 

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    Log.v(TAG, "OnCreateView"); 
    gridView = new GridView(mContext); 
    gridView.setNumColumns(GridView.AUTO_FIT); 
    gridView.setClickable(true); 
    gridView.setOnItemClickListener(this); 
    photoAdapter = new PhotoAdapter(mContext,     -1,Utils.getALbumList().get(0).getPhotosList()); 
    gridView.setAdapter(photoAdapter); 
    return gridView; 
} 

@Override 
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
    Log.v(TAG, "on ItemClikced"); 

} 

     } 

To mój Fragment ..

  package com.logictreeit.mobilezop.adapters; 

     import java.util.List; 

     import android.content.Context; 
     import android.view.LayoutInflater; 
     import android.view.View; 
     import android.view.ViewGroup; 
     import android.widget.ArrayAdapter; 
     import android.widget.CheckBox; 
     import android.widget.CompoundButton; 
     import android.widget.CompoundButton.OnCheckedChangeListener; 
     import android.widget.ImageView; 

     import com.logictreeit.mobilezop.R; 
     import com.logictreeit.mobilezop.models.Photo; 

      public class DupPhotoAdapter extends ArrayAdapter<Photo> { 
      private static final String TAG = "PhotoAdapter"; 
      private Context context; 
private List<Photo> photoList; 

public DupPhotoAdapter(Context context, int textViewResourceId, 
     List<Photo> objects) { 
    super(context, textViewResourceId, objects); 
    this.context = context; 
    this.photoList = objects; 
} 

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

public View getView(int position, View convertView, ViewGroup parent) { 
    convertView = LayoutInflater.from(context).inflate(
      R.layout.grid_item_image_layout, null); 

    ImageView imageView = (ImageView) convertView 
      .findViewById(R.id.grid_item_imageview); 
    final CheckBox checkBox = (CheckBox) convertView 
      .findViewById(R.id.grid_item_checkbox); 
    final Photo photo = photoList.get(position); 

    if (photo.isSelected()) { 
     checkBox.setChecked(true); 
    } else { 
     checkBox.setChecked(false); 
    } 
    imageView.setImageResource(Integer.parseInt(photo.getFileUrl())); 
    checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
     public void onCheckedChanged(CompoundButton buttonView, 
       boolean isChecked) { 
      if (isChecked) { 
       photo.setSelected(true); 
      } else { 
       photo.setSelected(false); 
      } 

     } 
    }); 
    return convertView; 

} 

    } 

To mój Adapter.

Jeśli wy know.Can u proszę mi powiedzieć ...

Dzięki, Caitanya

Odpowiedz

24

myślę twoi ImageViews kradzież ostrości, ponieważ są one Rejestrowalne. Tak więc kliknięcie elementu nie ma miejsca, ponieważ przechwytuje go ImageView.

Dodanie tych atrybutów do obrazków może pomóc, ale prawdopodobnie może spowodować problemy z weryfikacją.

android:focusable="false" 
    android:focusableInTouchMode="false" 

Posiadanie możliwych do skontrolowania przedmiotów w widoku listy jest trochę uciążliwe. Ale myślę, że znajdziesz pokrewne tematy, jak to zrobić.

Oto 1 tutorial, który wydaje się odpowiedni, muszę przyznać, że nie zrobił rzucił się bliżej na to, ale warto:

http://windrealm.org/tutorials/android/listview-with-checkboxes-without-listactivity.php

+3

Dzięki Konstantin..Thank cię tak much..It pracował me..Added te rekwizyty zarówno ImageView wyboru i tylko wtedy to działa . – Chaitu

+0

Cieszę się z tego! :) – Ostkontentitan

+0

Dodałem widok obrazu i pole wyboru w układzie liniowym programowo. Robię powyższe 2 wiersze za pomocą kodu Java. Ale nadal nie mogę odbierać żadnych elementów kliknięcia. – Namratha

1

Nadzieja może to pomóc komuś, W GridView, jeśli dodać przyciski lub ustaw "android: clickable = true" w elemencie wewnątrz, element OnItemClickListener gridview nie będzie słuchany, zamiast tego możesz utworzyć obraz lub tekst z obrazem i przekonać się, że nie można ustawić klikalnego znaku = "true". Teraz OnItemClickListener będzie nasłuchiwał TextView i to działało dla mnie.