将listview中的第一项设置为android的默认值

时间:2014-04-12 19:25:20

标签: android listview android-listview

我试过在线寻找一个很好的解决方案,但我似乎找不到一个。

有一个帐户列表视图。所选帐户的背景为浅蓝色,但仅在按下时才显示。这是我从以下地方获取代码的地方:Android ListView selected item stay highlighted

在onCreate方法中,我有一个onItemClickListener方法,如果我做listview.setSelection(0);在onItemClick方法之上,默认项是listview中的第一项。系统知道列表中的第一个帐户是当前选中的项目,但如何在视觉上显示它?

基本上,我想以某种方式做view.setSelected(true);列表视图中的第一项。

listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parentAdapter,
                    View view, int position, long id) {
                view.setSelected(true);
                Account account= accounts.get(position);
                accountNumber = account.getAccountNumber();
            }
        });

谢谢!

编辑:这是我们自定义适配器的getView

public final View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    rowView = inflater.inflate(rowResourceId, parent, false);
    textView = (TextView) rowView.findViewById(R.id.textView);
    textView.setTextColor(Color.BLACK);
    textView.setText(objects.get(position).debug());
    return rowView;
}

2 个答案:

答案 0 :(得分:1)

正确的方法是使用自定义数组适配器并覆盖getView方法。对于第一个项目,您将设置背景:

public final View getView(int position, View convertView, ViewGroup parent) {

    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    rowView = inflater.inflate(rowResourceId, parent, false);

    if(position == 0){
        //you might remove this check if your develop for new api's only
        int sdk = android.os.Build.VERSION.SDK_INT;
        if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
            rowView.setBackgroundDrawable();
        } else {
            rowView.setBackground();
        }
    }

    textView = (TextView) rowView.findViewById(R.id.textView);
    textView.setTextColor(Color.BLACK);
    textView.setText(objects.get(position).debug());

    return rowView;
}

在此处阅读更多相关信息:Vogella - Using lists in android此解决方案可能更适合强制选择。如果选择是由用户执行的操作,您实际上只想突出显示第一行,因此在获取视图方法中对其进行操作。

答案 1 :(得分:0)

所以我在代码方面做了一些欺骗并对其进行了硬编码,但它现在有效了!

对于自定义适配器中的getView:

if (position == 0) {
        textView.setBackgroundColor(Color.rgb(173, 211, 224));
}

在实际活动的onCreate方法中,对于setOnItemClickListener:

if (position != 0) {
View rowView = listview.getChildAt(0);
    TextView textView = (TextView) rowView.findViewById(R.id.textView);
textView.setBackgroundColor(Color.rgb(227, 236, 239));
} else {
    View rowView = listview.getChildAt(0);
    TextView textView = (TextView) rowView.findViewById(R.id.textView);
textView.setBackgroundColor(Color.rgb(173, 211, 224));
}