Android的 - 保持ListView的项目强调,一旦人们被点击 [英] Android - Keep ListView's item highlighted once one has been clicked

查看:110
本文介绍了Android的 - 保持ListView的项目强调,一旦人们被点击的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以,我有2 的ListView 窗口小部件,当您选择在第一个的值,二是填充在第一个有关选择值<活动code>的ListView 。这种机械的工作原理没有问题,但现在我希望用户选择,以保持高亮显示。我读过的问题涉及到这个话题ammount的好,似乎有一种方法可以做到这一点了无数尝试,但对新兴市场的4-5之后,我仍然无法得到它的工作。

So I have an activity with 2 ListView widgets, when you select a value in the first one, the second is populated with values related to the selection in the first ListView. This mechanic works without a problem, but now I want the user choices to stay highlighted. I've read a good ammount of question related to this topic and it seems there is a myriad of ways one can accomplish this but after trying about 4-5 of em' I still can't get it to work.

我知道了工作的第二个的ListView 使用安卓listSelector =#CCCCCC XML属性,但这似乎擦干净一次 OnItemClickListener 引入混合(像我在我的第一个 ListView控件使用)。

I've got it working on the second ListView using the android:listSelector="#CCCCCC" XML Attribute, but this seems to be wiped clean once a OnItemClickListener is introduced into the mix (like the one I use on my first ListView).

到目前为止,这里就是我有:

自定义 OnItemClickListener 我发现关于这个话题(略作修改它,以便它加载我的信息的第二个ListView控件),浏览各种答案:

Custom OnItemClickListener I found browsing various answer regarding this topic (slightly modified it in order for it to load my info the second 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)被调用和执行,但我的列表项保持相同的颜色背景:/

The method (OnItemClick) is called and executed, but the background of my ListItem stays the same color :/

我无法相信这个简单的任务已经证明是非常复杂的。

I can't believe that this simple task has proven so complicated.

如果我省略code,可能是有用的,或者如果我的问题是缺乏详细资料,请随时指出这一点,我会尽我所能来解释一下。

If I have omitted code that could be useful or if my question is lacking details, feel free to point that out and I'll do my best to explain myself.

推荐答案

将选定项的位置变量。更改 onItemClicked的位置()方法。检查清单适配器所选位置内 getView()键,设置背景所选项目。

Put a position variable for selected item. Change the position in onItemClicked() method. Check the selected position in List Adapter inside getView() and set the background for the selected item.

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设置变量时列表项点击。

Now set the selectedIndex variable when a list item clicked.

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的项目强调,一旦人们被点击的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆