Android里面ListView我现在不选中,怎么在程序里面让某一行变成选中状态,或者高亮也行!
listviewAndroid

解决方案 »

  1.   

    mListView.setSelection(position)这个是不是不行?
      

  2.   

    不是这个,这个是定位到第XX行吧, 我想让第XX行高亮!
      

  3.   


    package com.example.zdemo1;import java.util.ArrayList;
    import java.util.List;import android.app.Activity;
    import android.graphics.Color;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.BaseAdapter;
    import android.widget.ListView;
    import android.widget.TextView;public class ListBackground extends Activity {    private List<String> dataList = new ArrayList<String>();
        
        private ListView lv;
        
        private int clickPosition = -1;
        
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_list_background);
            for (char tempChar = 'a' ; tempChar <= 'z'; tempChar++){
                dataList.add(String.valueOf(tempChar));
            }
            lv = (ListView)findViewById(R.id.listView1);
            final MyAdapter ma = new MyAdapter();
            lv.setAdapter(ma);
            lv.setOnItemClickListener(new OnItemClickListener() {            @Override
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
                    if(position != clickPosition){
                        clickPosition = position;
                    }
                    else{
                        clickPosition = -1;
                    }
                    ma.notifyDataSetChanged();
                }
            });
        }    @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.activity_list_background, menu);
            return true;
        }
        
        private class MyAdapter extends BaseAdapter{        @Override
            public int getCount() {
                return dataList.size();
            }        @Override
            public Object getItem(int position) {
                return dataList.get(position);
            }        @Override
            public long getItemId(int position) {
                return position;
            }        @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                TextView tv = new TextView(ListBackground.this);
                tv.setText(dataList.get(position));
                tv.setBackgroundColor(Color.WHITE);
                if(position == clickPosition){
                    tv.setBackgroundColor(Color.BLACK);
                }
                return tv;           /* final int p = position;
                RadioButton rb = new RadioButton(ListBackground.this);
                rb.setOnCheckedChangeListener(new OnCheckedChangeListener() {
                    
                    @Override
                    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                        if(isChecked){
                            clickPosition=p;
                        }
                        else{
                            clickPosition = -1;
                        }
                        notifyDataSetChanged();
                    }
                });
                if(clickPosition == position){
                    rb.setChecked(true);
                }
                else{
                    rb.setChecked(false);
                }
                return rb;*/
            }
            
        }
    }原来帮人写的。跟你的需求应该一样吧。
      

  4.   

    新手,看了半天没看懂什么意思!!!不过我感觉应该和我表述的意思有些不同;    @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_list_background);
            for (char tempChar = 'a' ; tempChar <= 'z'; tempChar++){
                dataList.add(String.valueOf(tempChar));
            }
            lv = (ListView)findViewById(R.id.listView1);
            final MyAdapter ma = new MyAdapter();
            lv.setAdapter(ma);
            lv.setOnItemClickListener(new OnItemClickListener() {
     
                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
                    if(position != clickPosition){
                        clickPosition = position;
                    }
                    else{
                        clickPosition = -1;
                    }
                    ma.notifyDataSetChanged();
                }
            });
            //我想在这里添加一句什么话, 让指定的某一行变成选中状态,或者高亮也行!
        }
      

  5.   

    if(position == clickPosition){
                    tv.setBackgroundColor(Color.BLACK);
                }这一句,是设置被点击的按钮背景色改变的,当然你可以把tv.setBackgroundColor(Color.BLACK);改成选中状态或者高亮。
    具体思路就是我是通过的item的点击事件来控制clickPosition,然后进行刷新。
    你的需求是不选中也有某一行会变成高亮。不过这也需要一个事件来触发。只需要把控制clickPosition的这段代码放到你的事件中就可以了。
     if(position != clickPosition){
                        clickPosition = position;
                    }
                    else{
                        clickPosition = -1;
                    }
                    ma.notifyDataSetChanged();
      

  6.   

    我在程序里面用的是SimpleAdapter, getView这段代码应该怎么加?SimpleAdapter是不是不可以这么做/?
      

  7.   

    直接配置listview的listselector属性 就可以啦
      

  8.   

    我在程序里面用的是SimpleAdapter, getView这段代码应该怎么加?SimpleAdapter是不是不可以这么做/?
    SimpleAdapter貌似不可以。他给你写好了getview。推荐你自己写adapter继承BaseAdapter
      

  9.   

    我在程序里面用的是SimpleAdapter, getView这段代码应该怎么加?SimpleAdapter是不是不可以这么做/?
    SimpleAdapter貌似不可以。他给你写好了getview。推荐你自己写adapter继承BaseAdapter
    好吧, 谢谢了! 感谢最近帮我解答很多问题!