wake-up-neo.net

ViewRootImpl: ViewPostImeInputStage processPointer auf OnItemClick von Listview in Android

Ich habe einen cart_layout so:

<?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="match_parent"
    Android:orientation="vertical">

    <ListView
        Android:layout_width="match_parent"
        Android:layout_height="0dp"
        Android:layout_weight="9"
        Android:id="@+id/cart_listview"
        Android:layout_gravity="center_horizontal"
        Android:background="@color/whiteBg"/>

    <LinearLayout
        Android:orientation="horizontal"
        Android:layout_width="match_parent"
        Android:layout_height="0dp"
        Android:layout_weight="1"
        Android:layout_gravity="bottom"
        Android:padding="5dp"
        Android:gravity="bottom"
        Android:background="@color/whiteBg">
        <!-- this layout contains a button and a textview which I don't think is the problem -->
    </LinearLayout>
</LinearLayout>

Und den Java-Code dafür in Cart.Java:

protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.cart_layout);
    getSupportActionBar().setDisplayShowTitleEnabled(false);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    dbhandler = new DatabaseHandler(this);
    product_all = dbhandler.getProduct();
    total = (TextView)findViewById(R.id.cart_total_textview);

    listview = (ListView)findViewById(R.id.cart_listview);

    cart_adapter = new Custom_Cart_Adapter(this,product_all);
    listview.setAdapter(cart_adapter);

    listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Log.v("ITEM CLICK","CLICKED ITEM POSITION: "+position);
            Intent intent = new Intent(Cart.this, Item_edit_details.class);
            intent.putExtra("the_product", product_all.get(position));
            startActivity(intent);
        }
    });
}

Ich möchte nur ein OnItemClick-Ereignis erstellen, aber jedes Mal, wenn ich auf das Element tippe, auch wenn der listview.setOnItemClickListener vorhanden ist oder nicht, zeigt Logcat

ViewRootImpl: ViewPostImeInputStage processPointer 0

ViewRootImpl: ViewPostImeInputStage processPointer 1

und nichts passiert.

Ich sehe auch ein seltsames Protokoll wie dieses, manchmal sagte es "wahr", manchmal "falsch":

ActivityThread: updateVisibility: ActivityRecord {3308191 [email protected] {com.iwant.namhhgames.newiwant/com.iwant.namhhgames.newiwant.Listing_items}} show: false

Ich weiß nicht, ob es mit dem Problem zusammenhängt, und ich habe keine Ahnung, wann das Problem auftritt, vielleicht nachdem ich etwas versaut habe.

Der Logcat wird nur für echte Geräte angezeigt. Bei AVD wird nichts angezeigt.

Vielen Dank für Ihre wertvolle Zeit.

39
Tran Hoai Nam

Sie listen Custom_Cart_Adapter.Java ..__ nicht auf. Versuchen Sie, Android: focusable = "false" in Ihrer single_item.xml, die Sie in Custom_Cart_Adapter.Java

1

das ohne problem laufen also vielleicht dein adapter 

   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.testlist);

        ListView listview = (ListView)findViewById(R.id.listest);

        ArrayList<String> cart_adapter = new ArrayList<String>();

        cart_adapter.add("Me");
        cart_adapter.add("Him");
        cart_adapter.add("You");

        listview.setAdapter(new ArrayAdapter<String>(this,Android.R.layout.simple_list_item_1,cart_adapter));

        listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Log.e("ITEM CLICK","CLICKED ITEM POSITION: "+position);
            }
        });

    }

11-16 14: 55: 31.735 1915-1915/ca.dti.grounded.app E/ITEM KLICKEN: ANGEBOTENE POSITION: 2 11-16 14: 55: 34.233 1915-1915/ca.dti.grounded.app E/ITEM KLICKEN: GEKLICKTE POSITION: 0 11-16 14: 55: 35.616 1915-1915/ca.dti.grounded.app E/ITEM KLICKEN: ANGEBOTENE POSITION: 1 11-16 14: 55: 36.061 1915-1915/ca.dti.grounded.app E/ITEM KLICKEN: KLICKEN ITEM POSITION: 2

1
Hicham Bagui

Der onItemClickListener von listview sollte nicht verwendet werden, da dies zu vielen Problemen führen kann. Für diesen Fall würde ich die Verwendung eines benutzerdefinierten Klicklisteners in der Ansicht des Adapters vorschlagen und den Index durch diesen Klicklistener übergeben. Ich meine, versuchen Sie, Ihren eigenen onItemClickListener zu implementieren.

Wie Sie vielleicht bemerken, erscheint bei recyclerView der onItemClickListener nicht und der richtige Ansatz besteht darin, Ihren eigenen onItemClickListener zu implementieren. 

Sie haben es richtig gemacht, aber für arrayadapter sollte Ihr onItemClick()-Listener so aussehen. 

ListView listview = (ListView)findViewById(R.id.listest);
   listview .setOnItemClickListener(new OnItemClickListener()
   {
      @Override
      public void onItemClick(AdapterView<?> adapter, View v, int position,
            long arg3) 
      {
            Log.e("ITEM CLICK","CLICKED ITEM POSITION: "+position);
      }
   });

Hoffe es wird dir helfen !!

0
Hemant Parmar