从CustomAdapter更改ListView的项目位置

时间:2017-04-04 20:02:20

标签: android listview android-arrayadapter

在我的应用程序中有一个ListView,我在CustomAdapter上放置了一些数据,我在这里将项目的设置更改为我用它中的按钮制作的一个,就像这样:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/layout"
    android:padding="15dp">
    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="20sp"
        android:textColor="@android:color/black"
        android:text="Title"
        android:textAlignment="center"/>
    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="15sp"
        android:textColor="@android:color/black"
        android:text="Button" />
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_marginTop="5dp"
        android:background="@android:color/black"/>
</LinearLayout>

这是我的CustomAdapter:

class CustomAdapter extends ArrayAdapter<String> {

    private Context context;
    private List<String> items;

    CustomAdapter(@NonNull Context context, @NonNull String[] items) {
        super(context, 0, items);

        this.context = context;
        this.items = Arrays.asList(items);
    }

    @NonNull
    @Override
    public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        Holder holder = new Holder();
        if(convertView == null){
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.custom_list_item, parent, false);

            holder.layout = (LinearLayout) convertView.findViewById(R.id.layout);
            holder.textView = (TextView) convertView.findViewById(R.id.textView);
            holder.button = (Button) convertView.findViewById(R.id.button);

            convertView.setTag(holder);
        }else {
            holder = (CustomAdapter.Holder) convertView.getTag();
        }
        final Holder finalHolder = holder;
        final String item = items.get(position);

        finalHolder.textView.setText(item);
        finalHolder.button.setOnClickListener(
        new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    finalHolder.layout.setBackgroundColor(context.getColor(R.color.colorPrimary));

                    //this is how I've tried and haven't worked
                    items.remove(position);
                    items.add(items.size()-1, item);
                    notifyDataSetChanged();
                }
            }
        );

        return convertView;
    }

    private static class Holder{
        LinearLayout layout;
        TextView textView;
        Button button;
    }
}

我需要在单击列表中某个项目的按钮时,此项目将转到列表中的最后一个位置(颜色已更改)。

1 个答案:

答案 0 :(得分:0)

ListView lv = getListView();
setContentView(lv);
lv.setOnItemClickListener(new OnItemClickListener()
{
    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1,int position, long arg3)
    { 
         tmp = lv.get(0);
         lv.set(0, list.get(position));
         lv.set(position,tmp);
         adapter.notifyDataSetChanged();
    }
});

您也可以使用setSelection

更改列表视图的位置
ListView.setSelection(position);