2

我有一个ListView包含布局文件entry.xml给出的条目我想从ImageView可见性设置开始View.GONE并将其onItemLongClick更改为View.VISIBLE. 长时间单击的ListView条目将保持突出显示。

然后我想添加一个onClickListenerImageView虽然它是可见的),以便ListView可以通过点击图像来删除单击的条目。

OnClickListener条目上还需要有第二个,ListView以便如果长时间单击并突出显示它可以通过(短)单击条目来撤消。这将恢复ImageViewView.GONE.

我怎样才能做到这一点?


列表视图.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </ListView>

</LinearLayout>

入口.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="8dp" >

    <ImageView
        android:id="@+id/entry_deleteicon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:adjustViewBounds="true"
        android:baselineAlignBottom="false"
        android:maxHeight="40dp"
        android:maxWidth="45dp"
        android:src="@drawable/delete"
        android:visibility="gone" />

    <TextView
        android:id="@+id/entry_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:text="text" />
</RelativeLayout>

我的自定义适配器

private class SaveAdapter extends ArrayAdapter<String> {
        private int resourceId;
        private SaveHolder[] holder;

        public SaveAdapter(Context context, int resource) {
            super(context, resource);
            this.resourceId=resource;
            this.holder = new SaveHolder[5];
        }

        @Override
        public int getCount() {
            return 5;
        }

        @Override
        public View getView(final int position, View row, ViewGroup parent) {
            holder[position] = null;
            if(row==null){
                LayoutInflater inflater = getActivity().getLayoutInflater();
                row = inflater.inflate(resourceId, parent, false);

                holder[position] = new SaveHolder();
                holder[position].textName = (TextView) row.findViewById(R.id.entry_name);
                holder[position].iconDelete = (ImageView) row.findViewById(R.id.entry_deleteicon);              
                row.setTag(holder[position]);
            }else{
                holder[position] = (SaveHolder) row.getTag();
            }
            holder[position].textName.setText("name");
            return row;
        }
    }

    static class SaveHolder{
        TextView textName;
        ImageView iconDelete;
    }
4

4 回答 4

4

尝试这个:

private ImageView tmpImageView;

...

@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int position, long arg3){
    tmpImageView = (ImageView) view.findViewById(R.id.YOUR_IMAGEVIEW_ID);
    tmpImageView.setVisibility(View.VISIBLE);
}

@Override
public void onItemClick(AdapterView<?> adapterView, View view, int arg2, long arg3){
    tmpImageView.setVisibility(View.GONE);
}

...

希望这对你有用...

于 2013-11-08T11:54:01.510 回答
2
  1. 也添加一个OnItemLongClickListenerListView来处理您的可见性ImageView

  2. 添加一个OnItemClickListenerListView来处理你想要的功能。

  3. 也添加一个OnClickListenerImageView并在那里处理项目的删除。您可以使用自定义并覆盖此处Adapter解释的 getView 方法

于 2013-11-08T11:21:03.093 回答
1
Update your SaveAdapter like this.
->Implement listener for imageview.
->Add visible and hide function for imageview.





    private class SaveAdapter extends ArrayAdapter<String> {
                private int resourceId;
                private SaveHolder[] holder;
        int highLightedItemNumber = -1;

                public SaveAdapter(Context context, int resource) {
                    super(context, resource);
                    this.resourceId=resource;
                    this.holder = new SaveHolder[5];
                }

                @Override
                public int getCount() {
                    return 5;
                }

                @Override
                public View getView(final int position, View row, ViewGroup parent) {
                    holder[position] = null;
                    if(row==null){
                        LayoutInflater inflater = getActivity().getLayoutInflater();
                        row = inflater.inflate(resourceId, parent, false);

                        holder[position] = new SaveHolder();
                        holder[position].textName = (TextView) row.findViewById(R.id.entry_name);
                        holder[position].iconDelete = (ImageView) row.findViewById(R.id.entry_deleteicon);              
                        row.setTag(holder[position]);
                    }else{
                        holder[position] = (SaveHolder) row.getTag();
                    }
        if(highlightedItemNumber == position)
        {
        holder[position].iconDelete.setVisibility(View.VISIBLE);
        }
        else
        {
        holder[position].iconDelete.setVisibility(View.GONE);
        }
                    holder[position].textName.setText("name");
        holder[position].setOnClickListener(new OnClickListener(){
        public void onClick(View view)
        {
        //Perform your delete operation here;

        }
        });
                    return row;
                }
            }

        public void highlightImageView(int itemNumber)
        {
        highlightedItemPosition = itemNumber;
         notifyDataSetChanged();
        }

        public void disableHighlightedItem()
        {
        highlightedItemPosition = -1;
         notifyDataSetChanged();
        }
            static class SaveHolder{
                TextView textName;
                ImageView iconDelete;
            }

}

现在在您的 mainActivity 中,您正在创建 listView 实例。

ListView listview = (ListView) findViewById(R.id.yourlistviewId);
final SaveAdapter adapter = new SaveAdapter(this, resource); //your resource id.


listview.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View v, int position,
                    long id) {
                adapter.disableHighlightedItem();
            }

        });


listview.setOnItemLongClickListener(new OnItemLongClickListener() {

            @Override
            public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                    int position, long arg3) {
        adapter.highlightImageView(position);
            }

        });
于 2013-11-08T11:50:08.433 回答
0
  1. 长按列表项将使图像可见并且需要突出显示该列表项(更改项目的背景)我认为您在本节中不会有问题

  2. onckick on image 将使该列表项删除。(这在适配器类中是可管理的)

为此,您需要从要发送适配器类的数组列表中删除该项目,如下所示

arrayList.remove(position);
notifyDataSetChanged();
  1. 单击 listitem 将更改该项目的旧状态。要保持所有这些突出显示和非突出显示场景,您需要维护一个 ArrayList。开始用 0 填充数组列表,等于列表的大小。长按将数组列表位置值更改为 1然后单击将 1 更改为 0。
于 2013-11-08T11:40:51.040 回答