gpt4 book ai didi

Android - 单击后保持 ListView 的项目突出显示

转载 作者:IT老高 更新时间:2023-10-28 21:34:06 26 4
gpt4 key购买 nike

所以我有一个带有 2 个 ListView 小部件的 Activity ,当您在第一个小部件中选择一个值时,第二个将填充与第一个 ListView 中的选择相关的值>。这个机制没有问题,但现在我希望用户选择保持突出显示。我已经阅读了大量与该主题相关的问题,似乎有无数种方法可以实现这一点,但是在尝试了大约 4-5 次之后,我仍然无法让它发挥作用。

我已经使用 android:listSelector="#CCCCCC" XML 属性在第二个 ListView 上工作,但是这似乎在 OnItemClickListener 被引入到组合中(就像我在第一个 ListView 上使用的那个)。

到目前为止,这是我所拥有的:

自定义 OnItemClickListener 我发现浏览了有关此主题的各种答案(稍作修改,以便将我的信息加载到第二个 ListView):

private class ItemHighlighterListener implements OnItemClickListener {

private View oldSelection = null;

public void clearSelection() {
if(oldSelection != null) {
oldSelection.setBackgroundColor(android.R.color.transparent);
}
}

public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
clearSelection();
oldSelection = view;
view.setBackgroundDrawable(view.getContext().getResources().getDrawable(R.drawable.list_selector));
loadClubs(mXMLPortalOptions.getRegion(pos).getId());
mClubList.setAdapter(new ArrayAdapter<String>(getApplicationContext(), R.layout.list_item_white, mClubs));
}
}

这是我的 list_selector.xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:state_selected="true"><shape>
<solid android:color="#CCCCCC" />
</shape></item>

<item android:state_selected="false"><shape>
<solid android:color="#FFFFFF" />
</shape></item>

</selector>

方法 (OnItemClick) 被调用并执行,但我的 ListItem 的背景颜色保持不变:/

我不敢相信这个简单的任务竟然如此复杂。

如果我省略了可能有用的代码,或者我的问题缺乏细节,请随时指出,我会尽力解释自己。

最佳答案

为所选项目放置一个位置变量。更改 onItemClicked() 方法中的位置。查看getView()内List Adapter中选中的位置,并设置选中项的背景。

public class TestAdapter extends BaseAdapter
{
private Context context;
private ArrayList<TestList> testList;
private int selectedIndex;
private int selectedColor = Color.parseColor("#1b1b1b");

public TestAdapter(Context ctx, ArrayList<TestList> testList)
{
this.context = ctx;
this.testList = testList;
selectedIndex = -1;
}

public void setSelectedIndex(int ind)
{
selectedIndex = ind;
notifyDataSetChanged();
}

@Override
public int getCount()
{
return testList.size();
}

@Override
public Object getItem(int position)
{
return testList.get(position);
}

@Override
public long getItemId(int position)
{
return position;
}

private class ViewHolder
{
TextView tv;
}

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View vi = convertView;
ViewHolder holder;
if(convertView == null)
{
vi = LayoutInflater.from(context).inflate(R.layout.test_list_item, null);
holder = new ViewHolder();

holder.tv = (TextView) vi;

vi.setTag(holder);
}
else
{
holder = (ViewHolder) vi.getTag();
}

if(selectedIndex!= -1 && position == selectedIndex)
{
holder.tv.setBackgroundColor(Color.BLACK);
}
else
{
holder.tv.setBackgroundColor(selectedColor);
}
holder.tv.setText("" + (position + 1) + " " + testList.get(position).getTestText());

return vi;
}

}

现在在单击列表项时设置 selectedIndex 变量。

public class TestActivity extends Activity implements OnItemClickListener
{
// Implemented onItemClickListener

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

关于Android - 单击后保持 ListView 的项目突出显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9281000/

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