web-dev-qa-db-fra.com

ViewRootImpl: ViewPostImeInputStage processPointer on OntemClick de Listview dans android

J'ai un cart_layout comme ceci:

<?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>

Et le code Java correspondant dans 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);
        }
    });
}

Je veux juste créer un événement OnItemClick, mais chaque fois que je tape sur l'élément, même lorsque le listview.setOnItemClickListener est présent ou non, Logcat indique

ViewRootImpl: ViewPostImeInputStage processPointer 0

ViewRootImpl: ViewPostImeInputStage processPointer 1

et rien ne se passe.

Je vois aussi un journal étrange comme celui-ci, parfois il disait "vrai", parfois il disait "faux":

ActivityThread: updateVisibility: ActivityRecord {3308191 token=Android.os.BinderProxy@c7ed098 {com.iwant.namhhgames.newiwant/com.iwant.namhhgames.newiwant.Listing_items}} show: false

Je ne sais pas si cela a un lien avec le problème, et je ne sais pas du tout quand le problème survient, peut-être après que je me suis trompé.

Et le Logcat est affiché pour un périphérique réel uniquement. Avec AVD, rien n’est montré.

Merci pour votre temps précieux.

39
Tran Hoai Nam

Vous ne répertoriez pas Custom_Cart_Adapter.Java . Essayez d'ajouter Android: focusable = "false" dans votre fichier single_item.xml que vous utilisez dans Custom_Cart_Adapter.JavaIl peut vous aider.

1
Ivan Ponomarenko

cette course sans problème alors peut-être votre adaptateur 

   @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 CLICK: POSITION DE L'ARTICLE CLIQUÉE: 2 11-16 14: 55: 34.233 1915-1915/ca.dti.grounded.app E/ITEM CLICK: POSITION DE L'ARTICLE CLIQUÉE: 0 11-16 14: 55: 35.616 1915-1915/ca.dti.grounded.app E/ITEM CLICK: POSITION DE L'ARTICLE CLIQUÉE: 1 11-16 14: 55: 36.061 1915-1915/ca.dti.grounded.app E/ITEM CLICK: CLIQUÉ POSITION ARTICLE: 2

1
Hicham Bagui

Le onItemClickListener de listview ne doit pas être utilisé car il peut entraîner de nombreux problèmes. Pour ce cas, je suggérerais l'utilisation d'un écouteur de clic personnalisé sur la vue de l'adaptateur et le passage de l'index par cet écouteur de clic. Je veux dire, essayez d'implémenter votre propre onItemClickListener.

Comme vous le remarquerez peut-être, à recyclerView, onItemClickListener n'apparaît pas et l'approche appropriée consiste à implémenter votre propre onItemClickListener. 

1

Vous avez bien fait, mais pour arrayadapter votre auditeur onItemClick() devrait ressembler à ceci. 

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);
      }
   });

J'espère que cela vous aidera!

0
Hemant Parmar