0

ListView の順序を手動で並べ替えたい。私が(したい)これを達成する方法は、移動するアイテムをタップし、そのアイテムの背景を別の色に設定し、その位置(oldPosition)を保存してから、下に表示されるアイテムをタップし、最後に元のアイテムの場所の背景をリセットします。

これを行うために使用するコードは次のとおりです。

    List<String> catarray;            //  string array declared in main activity
    ArrayAdapter<String> catadapter;  //  adapter for Spinner declared in main activity
    ListView cats;                    //  listview declared in list activity
    ArrayAdapter<String> adapter;     //  adapter for listview declared in list activity
    int oldPosition = -1;

    cats.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            if (oldPosition < 0) {
                oldPosition = position;
                try {
                    dr = parent.getChildAt(position).getBackground();
                    parent.getChildAt(position).setBackgroundColor(Color.argb(255, 0, 153, 204));
                }
                catch (Exception e) {
                }
            }
            else {
                String item = PhotoActivity.catarray.remove(oldPosition);
                PhotoActivity.catarray.add(position,item);
                try {
                    parent.getChildAt(oldPosition).setBackground(dr);
                }
                catch (Exception e) {
                }
                oldPosition = -1;
                changed = true;

                PhotoActivity.catadapter.notifyDataSetChanged();
                adapter.notifyDataSetChanged();
            }
        }
   }); 

私が抱えている問題は、リストが表示されたビューよりも大きい場合、タップしたアイテムの両方が背景を変更しますが、表示範囲の下にある追加のアイテムも変更されることです。

したがって、たとえば、完全なリストが 12 項目で、そのうち最初の 8 項目が表示されている場合、2 番目の項目をタップすると、その項目と項目 11 の両方が表示されます (つまり、2 番目の項目と表示されている項目の下の 1 つ)範囲) が強調表示されます。

  1. なぜこれが起こるのですか?

  2. どうすればそれを停止できますか、それができない場合は、誤って強調表示されたアイテムが表示されていないため、parent.getChildAt ... を介してアクセスできないため、誤って強調表示されたアイテムをリセットできます...

4

1 に答える 1