cari

Rumah  >  Soal Jawab  >  teks badan

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 hari yang lalu622

membalas semua(4)saya akan balas

  • ringa_lee

    ringa_lee2017-04-17 18:03:43

    adalah masalah yang sangat mudah tetapi terdedah kepada ralat Selepas menambah footer, kuantiti listview item anda ialah 3, tetapi adapter daripada viewcount sebenarnya tidak menjadi 3, jadi Apabila. anda klik pengaki, obj.getItem(2) dilaksanakan, yang mesti merupakan tatasusunan di luar sempadan. 对于添加了header或footer的listview, cara yang betul untuk mendapatkan semula item hendaklah

    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); boleh memastikan anda tidak melepasi sempadan apabila mengambil kedudukan 2, dan kemudian membuat penghakiman batal objek.

    balas
    0
  • 天蓬老师

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

    Anda tidak boleh menggunakan setOnItemClickListener sebagai acara klik footview saya rasa anda harus menetapkannya secara berasingan
    Sebagai contoh, footview.setonClickListener(OnClickListener baharu{});

    balas
    0
  • 伊谢尔伦

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

    Subskrip tatasusunan anda di luar had saiz tatasusunan anda ialah 2, jadi subskrip yang sepadan hanya boleh 0 dan 1, tetapi anda menggunakan 2 apabila menggunakannya. Ralat menunjukkan bahawa anda mempunyai indeks yang tidak sah baris 61 dan 88 sendiri untuk melihat sama ada terdapat mana-mana tempat di mana indeks adalah 2 dipanggil

    balas
    0
  • 伊谢尔伦

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

    Untuk mengalihkan footerLayout keluar daripada listView ditulis sebagai

    listview.addFooterView(footerLayout, null, false);

    balas
    0
  • Batalbalas