2016-10-14 1 views
0

Ich habe einen listview-Adapter, der eine Zeile enthält eine Schaltfläche erstellt. Es funktioniert, wenn ich auf die Schaltfläche geklickt wird, aber nicht, wenn ich auf die Zeile klicken Dies ist meine Haupttätigkeitandroid listview mit Button funktioniert nicht

public class MainActivity extends AppCompatActivity { 
. 
. 
. 
ListView lvProducts = (ListView) findViewById(R.id.lvProducts); 
lvProducts.addHeaderView(getLayoutInflater().inflate(R.layout.product_list_header, lvProducts, false)); 

    ProductAdapter productAdapter = new ProductAdapter(this); 
    productAdapter.updateProducts(Constant.PRODUCT_LIST); 

    lvProducts.setAdapter(productAdapter); 

    lvProducts.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
           int position, long id) { 
      Product product = Constant.PRODUCT_LIST.get(position - 1); 
      Intent intent = new Intent(MainActivity.this, ProductActivity.class); 
      Bundle bundle = new Bundle(); 
      bundle.putSerializable("product", product); 
      Log.d(TAG, "View product: " + product.getName()); 
      intent.putExtras(bundle); 
      startActivity(intent); 
     } 
    }); 

Dies ist der Teil-Adapter ist

public class ProductAdapter extends BaseAdapter { 
bAdd.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //Toast.makeText(v.getContext(),"Button "+position,Toast.LENGTH_SHORT).show(); 
      Cart cart = CartHelper.getCart(); 
      Log.d(TAG, "Adding product: " + product.getName()); 
      cart.add(product, 1); 
      Intent intent = new Intent(context, ShoppingCartActivity.class); 
      context.startActivity(intent); 
     } 
    }); 

Die XML-Datei des Adapters

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="200px" 
android:layout_margin="5dp" 
android:minHeight="50dp" 
android:orientation="horizontal" 
android:weightSum="1"> 

<TextView 
    android:id="@+id/tvProductName" 
    android:layout_width="0dip" 
    android:layout_height="match_parent" 
    android:layout_weight="0.50" 
    android:gravity="center" 
    android:text=""/> 

<ImageView android:id="@+id/ivProductImage" 
    android:layout_width="0dip" 
    android:layout_height="match_parent" 
    android:layout_weight="0.25" 
    android:gravity="center"/> 

<TextView 
    android:id="@+id/tvProductPrice" 
    android:layout_width="0dip" 
    android:layout_height="match_parent" 
    android:layout_weight="0.24" 
    android:gravity="center" 
    android:text=""/> 

<Button 
    android:id="@+id/tvAddItem" 
    android:layout_width="69dp" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:text="A" 
    /> 
</LinearLayout> 
+0

können Sie bitte Ihre XML-Code des Adapters –

+0

Mögliche Duplikat [Android einfügen: Wie OnClick-Ereignis für Button in Liste setzen Element von ListView] (http://stackoverflow.com/questions/12596199/android-how-to-set-onclick-event-for-button-in-list-item-of-listview) –

+0

was meinst du mit " es funktionierte, als ich auf den Knopf geklickt habe, aber nicht als ich auf die Reihe geklickt habe "? Wenn dein Problem der Knopf ist und es funktionierte, klickend auf den Knopf, ich verstehe nicht, ob das Problem –

Antwort

3

In Ihrer benutzerdefinierten Layout-Datei festgelegt

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

für den Button.

0

Da Ihr Adapter-Layout den Klick-Listener view.ie enthält, verwenden Sie in Ihrem Fall die Schaltflächenansicht, die den Listenansicht-Klick-Listener blockiert. Also in Ihrem Adapter übergeordnetes Layout benötigen Sie Block Nachkommen wie unten hinzufügen,

android:descendantFocusability="blocksDescendants" 
+0

es funktioniert nicht ... ich habe ein wenig Forschung über die Fokussierbarkeit ... Ich habe versucht, das folgende ... 'android: focusable =" false "' ... es funktioniert – beginner

+0

@beginner: OK :) – Jeevanandhan

0

Sie müssen Zuhörer hinzufügen sowohl Schaltfläche und Ihre Eltern Layout wie unten:

public class ProductAdapter extends BaseAdapter implements View.OnClickListener { 
    bAdd.setOnClickListener(this); 
    layout.setOnClickListener(this); 
    @Override 
      public void onClick(View v) { 
       //Toast.makeText(v.getContext(),"Button "+position,Toast.LENGTH_SHORT).show(); 
       Cart cart = CartHelper.getCart(); 
       Log.d(TAG, "Adding product: " + product.getName()); 
       cart.add(product, 1); 
       Intent intent = new Intent(context, ShoppingCartActivity.class); 
       context.startActivity(intent); 
      } 
     } 
    } 
Verwandte Themen