Onclicklistner ne fonctionne pas dans le fragment listview
J'ai une listview avec adaptateur personnalisé dans listfragment et aussi de mettre en onclicklistner pour listview. Mais Onclicklistner ne fonctionne pas.
Voici mon code:
public class BasicFragment extends ListFragment {
ListView lv;
MyCustomAdapter adapter;
@Override
public void onCreate(Bundle si) {
super.onCreate(si);
}
@Override
public void onActivityCreated(Bundle b) {
super.onActivityCreated(b);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_basic, container, false);
lv = (ListView) view.findViewById(android.R.id.list);
FetchedData DT = FetchedData.StaticDataTransfer();
RecepiesProperties[] AryObjaz = DT.getData();
getdata(AryObjaz);
adapter = new MyCustomAdapter(getActivity(), R.layout.listview_layout,
Dataset);
lv.setAdapter(adapter);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
Toast t = Toast.makeText(getActivity(), "Message",
Toast.LENGTH_SHORT);
t.show();
}
});
return view;
}}
MyCustomAdapter.java
public class MyCustomAdapter extends ArrayAdapter<Recipes> {
Context context;
int layoutResourceId;
Recipes data[] = null;
Typeface typeface;
public ImageLoader imageLoader;
public MyCustomAdapter(Context context, int textViewResourceId,
Recipes[] dataset) {
super(context, textViewResourceId, dataset);
this.layoutResourceId = textViewResourceId;
this.context = context;
this.data = dataset;
imageLoader = new ImageLoader(context.getApplicationContext());
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
RecipesHolder holder = new RecipesHolder();
holder.imgIcon = (ImageView) row.findViewById(R.id.imageView1);
holder.txtTitle = (TextView) row.findViewById(R.id.title);
holder.category = (TextView) row.findViewById(R.id.category);
holder.source = (TextView) row.findViewById(R.id.source);
holder.country = (TextView) row.findViewById(R.id.country);
holder.readytime = (TextView) row.findViewById(R.id.readytime);
holder.tips = (Button) row.findViewById(R.id.tips);
holder.fav = (Button) row.findViewById(R.id.fav);
Recipes ap = data[position];
imageLoader.DisplayImage(ap.getIMAGENAME240(), holder.imgIcon);
holder.txtTitle.setText(ap.getNAME());
holder.category.setText(ap.getCATEGORY());
holder.source.setText(ap.getSOURCE());
holder.country.setText(ap.getCOUNTRY());
holder.readytime.setText(ap.getREADYTIME());
return row;
}
static class RecipesHolder {
ImageView imgIcon;
TextView txtTitle;
TextView category;
TextView source;
TextView country;
TextView readytime;
Button tips;
Button fav;
}}
//listview_layout.xml
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"><ImageView
android:id="@+id/imageView1"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_alignParentLeft="true"
android:focusable="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="5dp"
android:layout_marginTop="10dp" />
<TextView
android:id="@+id/readytime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/country"
android:layout_alignBottom="@+id/country"
android:layout_marginLeft="73dp"
android:layout_toRightOf="@+id/country"
android:focusable="true"
android:text="TextView"
android:textColor="#000" />
<TextView
android:id="@+id/country"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/imageView1"
android:layout_alignLeft="@+id/source"
android:focusable="true"
android:text="TextView"
android:textColor="#000" />
<TextView
android:id="@+id/source"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/country"
android:layout_alignLeft="@+id/category"
android:focusable="true"
android:text="TextView"
android:textColor="#000" />
<TextView
android:id="@+id/category"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/source"
android:layout_alignLeft="@+id/title"
android:text="TextView"
android:focusable="true"
android:textColor="#000" />
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/category"
android:layout_toRightOf="@+id/imageView1"
android:text="TextView"
android:focusable="true"
android:textColor="#000" />
<Button
android:id="@+id/fav"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/tips"
android:layout_below="@+id/source"
android:focusable="true"
android:background="@drawable/favourite" />
<Button
android:id="@+id/tips"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignTop="@+id/textView1"
android:layout_marginRight="14dp"
android:background="@drawable/yellow" /></RelativeLayout>
Avez-vous essayé de déclarer l'auditeur à l'intérieur de onViewCreated(vue de la Vue, Bundle savedInstanceState)? Et pas à l'intérieur de onCreateView(). Il ne faut pas vivre dans le onViewCreate() la méthode.
OriginalL'auteur jeevamuthu | 2013-02-27
Vous devez vous connecter pour publier un commentaire.
enfin résolu le problème lorsque tous les contrôles(Boutons,textviews) dans listview ensemble de focusable faux.
Cela a fonctionné pour moi aussi! J'ai utiliser le code android:focusable="false" tous Boutons et TextViews à l'intérieur de mon XML qui est associé à mon fragment de classe.
OriginalL'auteur jeevamuthu
Vérifier votre MyCustomAdapter, Certains widget (comme: Bouton,ImageButton) dans la mise en page personnalisée va consommer de l'événement click et puis le onItemClick ne sera jamais appelé.
Utiliser le code suivant dans votre adaper de la méthode getView pour obtenir l'événement onClick.
OriginalL'auteur Bolton
Que par l'API Android Doc:
Puisque vous n'avez pas poster le fichier de mise en page pour le fragment que je ne suis pas sûr de ce qui s'est passé ici.
Le code suivant est comment il doit être lorsque vous utilisez la valeur par défaut de la vue liste de ListFragment. Si vous utilisez le ListFragment vous devriez exploiter les autres méthodes disponibles comme
setListAdapter
etonListItemClick
. Vous pouvez en outre faire la même chose sans l'aide d'un ListFragment (en Utilisant simplement Fragment).Le Fragment de Code (Modifié votre morceau de code)
De plus, j'ai modifié votre code d'adaptateur pour aider à recycler les points de vue, votre code n'a pas été à l'aide de la vue de recyclage et a toujours été de gonfler les points de vue.
Code d'adaptateur:
OriginalL'auteur Abhishek Nandi
Lorsque vous êtes gonflant de votre point de vue, il semble que votre point de vue a 2 Boutons:
ce
row.findViewById(R.id.tips);
et ce
row.findViewById(R.id.fav);
Vous devriez supprimer ces boutons (les remplacer par textviews si vous ne voulez pas leur clic)
Ou si vous souhaitez que la clique de ces boutons, vous pouvez utiliser OnClickListeners pour chaque bouton et un autre OnClickListener pour l'ensemble de la vue.
EXEMPLE
montrez-moi votre xml
listview_layout.xml
où sont les boutons avec
android:id="@+id/fav"
etandroid:id="@+id/tips"
maintenant voir listview_layout.xml. j'ai besoin de clics de boutons en listview et listview ligne trop
J'ai édité la réponse et fixe votre
getView
fonction. Les commentaires devraient vous donner une meilleure compréhension de Titulaire et bien sûr les cliquez sur les auditeursOriginalL'auteur Sherif elKhatib
Placez le code suivant dans
onViewCreated()
méthode:Le problème peut résider dans le fait que la vue n'est pas encore construit dans onViewCreate(), il n'est donc pas recommandé de définir les auditeurs.
Le Toast n'apparaissent pas?
oui.toast apparaît pas. j'ai utiliser CustomAdapter pour listview.
Montrez-nous votre "MyCustomAdapter" de la classe.
Veuillez voir MyCustomAdapter classe.
OriginalL'auteur Tool
Je pense que cela devrait fonctionner
OriginalL'auteur Bigflow
Adaptateur a la méthode areAllItemsEnabled (), il pourrait être utile.
public abstract boolean areAllItemsEnabled ()
Indique si tous les éléments de cette carte sont activés. Si la valeur retournée par cette méthode changements au fil du temps, il n'y a aucune garantie qu'il va prendre effet. Si la valeur est true, cela signifie que tous les éléments sont sélectionnables et cliquable (il n'y a pas de séparateur.)
OriginalL'auteur Rodion Altshuler
OriginalL'auteur Droidee
Vient de mettre
android:focusable="false" android:clickable="false"
dans la mise en page. Pour tous les textviews,boutons etc.Le Problème Est Résolu.
OriginalL'auteur Ashwin S Ashok
J'ai eu un problème similaire, il m'a fallu très longtemps pour comprendre ce qui n'allait pas.
Déjà mon fragment de la onListItemClick() a ouvert de nouvelles activités, mais après le retour à la fragment de la onListItemClick() écouteur ne fonctionne plus.
Ce problème a été résolu par la création d'un auditeur à l'intérieur de mon personnalisée ArrayAdapter à la place. J'ai placé ce code à l'intérieur de getView():
J'ai pas dormi de la nuit la fixation de ce (il est 8h du matin), j'ai pensé que je devrais poster ma solution pour quelqu'un d'autre qui est dans un même endroit 🙂
OriginalL'auteur user2254319