java.lang.NoSuchMethodException: onClick dans la vue liste sur android
dans mon application j'utilise le bouton image dans la vue liste. j'écris d'action pour chaque bouton image. mais je m'en java.lang.NoSuchMethodException: onClick exception. je ne sais pas la raison de l'erreur s'il vous plaît aider moi. comment l'action de l'écriture pour l'image des boutons . merci à l'avance.
public class InventoryListActivity extends ListActivity {
private InventoryAdapter adapter;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.inventory_list);
adapter = new InventoryAdapter(this);
setListAdapter(adapter);
}
}
dans InventoryAdapter activité:
public class InventoryAdapter extends BaseAdapter implements Observer,OnClickListener {
public InventoryAdapter(Context ctx) {
context = ctx;
inventory = IAPManager.shared().getInventory();
inventory.addObserver(this);
inventory.load();
}
public void update(Observable o, Object arg) {
switch ( ((Inventory)arg).getStatus() ) {
case LOADED:
this.notifyDataSetChanged();
break;
default:
break;
}
}
@Override
public int getCount() {
return inventory.size(Inventory.FilterType.ALL);
}
@Override
public Object getItem(int position) {
return inventory.getProducts(Inventory.FilterType.ALL).get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Product product = (Product) getItem(position);
View view;
if(convertView == null) {
LayoutInflater inflater = (LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.inventory_list_item, null);
}
else {
view = convertView;
}
play = (ImageButton)findViewById(R.id.imageButton2);
detail = (ImageButton)findViewById(R.id.imageButton3);
buy = (ImageButton)findViewById(R.id.imageButton2);
play.setTag(position);
detail.setTag(position);
buy.setTag(position);
titleView = (TextView) view.findViewById(R.id.product_title);
titleView.setText(product.getTitle());
iconView = (ImageView) view.findViewById(R.id.product_icon);
String iconURL = product.getIconURLString();
if(AsyncImageLoader.contains(iconURL)) {
iconView.setImageDrawable(AsyncImageLoader.get(iconURL));
}
else {
iconView.setImageDrawable(null);
new AsyncImageLoader(product.getIconURLString(), new AsyncImageLoader.Delegate(){
public void imageLoaded(String urlString, Drawable imageDrawable) {
notifyDataSetChanged();
}
});
}
descriptionView = (TextView) view.findViewById(R.id.product_description);
descriptionView.setText(product.getDescription());
return view;
}
private ImageButton findViewById(int imagebutton2) {
//TODO Auto-generated method stub
return null;
}
@Override
public void onClick(View v) {
Log.e("onclick","onclick");
Integer position = (Integer) v.getTag();
switch(v.getId()){
case R.id.imageButton1:
Log.e("Buy","buy position"+position);
break;
case R.id.imageButton2:
Log.e("play","play position"+position);
break;
case R.id.imageButton3:
Log.e("detail","detail position"+position);
break;
}
}
}
en xml:
<ImageButton android:background="@drawable/play_btn" android:focusable="false" android:onClick="onClick"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:id="@+id/imageButton2" android:layout_weight="0.5" />
- pas sûr à 100%, mais je pense que le onClick() la méthode est recherché dans l'activité, et non pas dans l'adaptateur
Vous devez vous connecter pour publier un commentaire.
Je pense que le problème est, que vous êtes en train de câbler l'onClick auditeur via xml, mais la mettre en œuvre dans votre carte. Je pense que android n'est pas simplement reconnaître le onClick auditeur ou ne sait pas qui est devrait être utilisé pour la ImageButton. Essayez de mettre en œuvre et ajouter le OnClickListener de façon dynamique dans la getView() la méthode.
Mise à JOUR
Vérifier la première instruction if de la getView() la méthode. Il y a la OnClickListener sera fixé pour les 3 boutons. Comme votre carte implémente la OnClickListener interface vous passer de l'adapter à la méthode. Vous devez également supprimer les
android:onClick="onClick"
attribut de votre ImageButtons dans la mise en page du fichier xml.Pour ceux d'entre nous qui sont têtus et ne veux pas faire un OnClickListener, voici un exemple:
http://developer.android.com/reference/android/widget/Button.html
REMARQUE: pour raccorder les XMLs android:onClick terrain jusqu'à votre activité de méthode, vous aurez besoin d'avoir la bonne signature, à savoir:
Vous devez supprimer le android:onClick="onClick" à partir de votre XML, parce que le ImageButton ne sais pas ce que cela signifie. C'est pourquoi vous obtenez une NoSuchMethodException au moment de l'exécution.
Vous devez également supprimer les findViewById une méthode qui retourne null -- qui va causer rien de mais des problèmes.
Ne pas mettre en œuvre OnClickListener, ce n'est pas ce que vous voulez vous pour cette. Et puis, de vous débarrasser de votre onClick méthode. Au lieu de cela, vous devez définir un nouveau OnClickListener pour chaque ImageButton. Comme:
Le faire pour chacun de le "jouer", "détail", et "acheter" ImageButtons. Notez que vous pouvez utiliser n'importe quelle variable qui est définie comme final.
J'espère qu'elle vous mène dans la bonne direction.
Button
avait unandroid:onClick
attribut qui me donnait unjava.lang.NoSuchMethodException
exception quand j'ai cliqué sur elle. Cela a fait l'affaire!J'ai fait une chose similaire, mais dans l'activité principale (où la liste est déclarée), j'ai ajouté ceci:
Si votre mise en page est gonflé dans un
Fragment
dans lequel vous voulez attraper l'onClick
comme spécifié par le fichier XML, il peut être dirigé vers votre principaleActivity
.J'ai un
ViewPager
qui est de montrer un certain nombre de fragments. Chaque fragment a un lienImageView
qui doit appelerchangePicture
lorsque l'utilisateur clique dessus, mais le fragment de code n'est pas appelé, elle est la principaleActivity
qui reçoit l'appel.Donc la façon dont je l'ai résolu est de définir ce que
onClickListener
comme de nombreux a mentionné.