android - Error: java.lang.IndexOutOfBoundsException: Invalid index 2
PHP中文网
PHP中文网 2017-04-17 18:01:43
0
4
616

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中文网

认证高级PHP讲师

membalas semua(4)
左手右手慢动作

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.

Peter_Zhu

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

伊谢尔伦

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

伊谢尔伦

Untuk mengalihkan footerLayout keluar daripada listView ditulis sebagai

listview.addFooterView(footerLayout, null, false);

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan