recherche

Maison  >  Questions et réponses  >  le corps du texte

android - Error: java.lang.IndexOutOfBoundsException: Invalid index 2

How to remove the seperator line in footerLayout? I have a footerLayout below the listView, used to display the totalAmount as shown below. If I click the seperator line in footerLayout, my app crashed.

My MainActivity

AllAdapter obj = new AllAdapter(getApplication(), search, listview,imageView,text,button);
footerLayout = (LinearLayout) getLayoutInflater().inflate(R.layout.under_listview, null);
totalAmount = (TextView) footerLayout.findViewById(R.id.amount);

LogCat error

 java.lang.IndexOutOfBoundsException: Invalid index 2, size is 2
            at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
            at java.util.ArrayList.get(ArrayList.java:304)
            at com.example.tony.monthlyexpenses.adapter.AllAdapter.getItem(AllAdapter.java:61)
            at com.example.tony.monthlyexpenses.QuickExpenses$1.onItemClick(QuickExpenses.java:88)
            at android.widget.AdapterView.performItemClick(AdapterView.java:301)

The error pointed to listView onClickListener

 listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> listView, View view, final int position, long id) {
                mClickedPosition = position;
                Expenses o = (Expenses) obj.getItem(position);
                String day = o.getDate();
            }
        });

AllAdapter

 public Expenses getItem(int position) {
        return search.get(position);
    }

The footerLayout is supposed to be displayed outside the listView, not inside. How can I get rid of this ?

I also have activity_main.xml, AllAdapter class, all_adapter.xml for ListView and also under_listview.xml for the footerLayout.

activity_main

AllAdapter

under_listview

How to move the footerLayout out from the ListView ?

I add android:footerpidersEnabled="false" now become like this

But still clickable !!!

谁知道问题出在哪?

footerLayout被按时如何不出现灰色?

PHP中文网PHP中文网2818 Il y a quelques jours623

répondre à tous(4)je répondrai

  • ringa_lee

    ringa_lee2017-04-17 18:03:43

    est un problème très simple mais sujet aux erreurs. Après avoir ajouté footer, la quantité de votre listview item est 3, mais le adapter de viewcount ne devient pas réellement 3, donc Quand vous cliquez sur le pied de page, obj.getItem(2) est exécuté, ce qui doit être une exception hors limites du tableau. 对于添加了header或footer的listview, la bonne façon de récupérer l'article devrait être

    listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                public void onItemClick(AdapterView<?> listView, View view, final int position, long id) {
                    Expenses o = (Expenses) listView.getAdapter().getItem(position);
                    if(o != null){
                        mClickedPosition = position;
                        //Expenses o = (Expenses) obj.getItem(position);
                        String day = o.getDate();
                    }
                }
            });
    

    header或footer属于AdapterView的子view, listView.getAdapter().getItem(position); peut garantir que vous ne franchissez pas la frontière lorsque vous prenez la position 2, puis effectuez un jugement nul d'objet.

    répondre
    0
  • 天蓬老师

    天蓬老师2017-04-17 18:03:43

    Vous ne pouvez pas utiliser setOnItemClickListener comme événement de clic de footview. Je pense que vous devriez le définir séparément
    Par exemple, footview.setonClickListener(new OnClickListener{});

    répondre
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 18:03:43

    L'indice de votre tableau est hors limites. La taille de votre tableau est de 2, donc les indices correspondants ne peuvent être que 0 et 1, mais vous avez utilisé 2 lors de son utilisation. L'erreur montre que vous avez un index non valide. les lignes 61 et 88 vous-même pour voir s'il y a un endroit où l'index est 2 est appelé

    répondre
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 18:03:43

    Déplacer footerLayout hors de listView s'écrit

    listview.addFooterView(footerLayout, null, false);

    répondre
    0
  • Annulerrépondre