gpt4 book ai didi

Android Search Checkable ListView

转载 作者:行者123 更新时间:2023-11-30 04:06:01 26 4
gpt4 key购买 nike

我想让它让用户可以通过 ListView 搜索所需的项目。我已经创建了一个没有搜索实现的可检查 ListView。我尝试使用 EditText 和 TextChangedListener 添加搜索。这对于普通的 ListView 工作正常,但由于每次用户键入时此方法都会创建一个新的适配器,因此检查的项目会丢失。

我的问题:

一个。有没有办法在维护相同适配器的同时搜索 ListView?

B.有没有办法使用我当前使用 TextChangedListener 的方法,但保持选中的项目?

最佳答案

您可以构建自己的包含 ListView 元素字段的类,并添加一个字段 (isChecked)。当您重新创建适配器时,您使用已经创建的对象并保存选中状态,并且在每一行的 getview 中您可以通过此属性选中\取消选中此项

这是我的自定义复选框,您可以使用它并根据需要进行修改,我认为它可以满足您的目的(我从我的应用程序中获取此代码,您可以在 this app 中查看它的工作原理):

package ru.human.notification;


import java.util.ArrayList;

import android.content.Context;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
import android.widget.CheckedTextView;

public class CustomCheckBox extends CheckedTextView
{

private int CHECKED_IMAGE;
private int UNCHECKED_IMAGE;
private main_full parent;
private ArrayList<View> viewsToCheck;
private int msgType;

public void setParent(main_full parent, int msgType)
{
this.parent = parent;
this.msgType = msgType;
setOnLongClickListener(longClickListner);
}


public void addViewToCheck(View view)
{
this.viewsToCheck.add(view);
}


OnLongClickListener longClickListner = new OnLongClickListener() {

@Override
public boolean onLongClick(View v) {
// TODO Auto-generated method stub
if (parent != null && isChecked())
parent.showTimeDialog(msgType);
return true;
}
};

OnClickListener listener = new OnClickListener()
{

public void onClick(View v)
{
// TODO Auto-generated method stub
if (!isChecked())
{
setTextColor(getResources().getColor(R.color.green));
setPaintFlags(0);
setChecked(true);
setCheckMarkDrawable(CHECKED_IMAGE);
if (parent != null)
parent.showTimeDialog(msgType);
}
else
{
setTextColor(getResources().getColor(R.color.lightgrey));
setPaintFlags(Paint.STRIKE_THRU_TEXT_FLAG);
setChecked(false);
setCheckMarkDrawable(UNCHECKED_IMAGE);
}
for (View view: viewsToCheck)
view.setVisibility(isChecked()?View.VISIBLE:View.GONE);
}
};

public CustomCheckBox(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
setOnClickListener(listener);
System.out.println("1");
// TODO Auto-generated constructor stub
// TODO mmmm

}

public CustomCheckBox(Context context, AttributeSet attrs)
{
super(context, attrs);
viewsToCheck = new ArrayList<View>();
String xmlns="http://schemas.android.com/apk/res/ru.human.notification";
setOnClickListener(listener);
System.out.println("2");
int k = R.drawable.alarmgrey;
CHECKED_IMAGE = attrs.getAttributeResourceValue(xmlns, "checkedImage", 404);
UNCHECKED_IMAGE = attrs.getAttributeResourceValue(xmlns, "uncheckedImage", 404);
setCheckMarkDrawable(UNCHECKED_IMAGE);
setTextColor(getResources().getColor(R.color.lightgrey));
setTextSize(18f);
setPaintFlags(Paint.STRIKE_THRU_TEXT_FLAG);
// setChecked(false);
System.out.println(CHECKED_IMAGE +" " + UNCHECKED_IMAGE + " " +k);


// TODO Auto-generated constructor stub
}

public CustomCheckBox(Context context)
{
super(context);
final Context parent = context;
System.out.println("3");
// TODO Auto-generated constructor stub
setOnClickListener(listener);
}

}

属性.xml:

</declare-styleable>


<declare-styleable name="CustomCheckBox">
<attr name="uncheckedImage" format="integer"/>
<attr name="checkedImage" format="integer"/>
</declare-styleable>

</resources>

用法:

<ru.human.notification.CustomCheckBox
android:id="@+id/delayed"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/settingsbutton"
android:checked="false"
customcheckbox:checkedImage="@drawable/clockcolor"
android:text="@string/delay"
customcheckbox:uncheckedImage="@drawable/clockgrey" />

将此 View 放入 ListView 并创建 setChecked 方法(代码与 onClick 方法中的代码相同)。不要注意 setParent 和 addViewToCheck 方法 - 它们是在我的应用程序中控制 UI 的方法。

关于Android Search Checkable ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11663693/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com