Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android TextView更改使用ListView和ArrayAdapter应用于多个TextView_Android_Listview_Android Arrayadapter_Textview - Fatal编程技术网

Android TextView更改使用ListView和ArrayAdapter应用于多个TextView

Android TextView更改使用ListView和ArrayAdapter应用于多个TextView,android,listview,android-arrayadapter,textview,Android,Listview,Android Arrayadapter,Textview,不久前,我开始做一个小项目,主要目标是为我打造一种方法,在100周的时间里跟踪我的行动 我还是一名android新手,遇到了一个无法解释的问题 基本上,我使用ArrayAdapter填充了一个包含100个字符串的列表(Week1、Week2、Week3…Week100) 在每个文本视图上设置onclicklistener,以便当用户单击文本视图时,背景颜色将变为红色 但是,;每当我点击一个文本视图时——不止一个文本视图被着色 注: 我正在使用滚动视图滚动整个列表。(填充后,100周列表将填满整个

不久前,我开始做一个小项目,主要目标是为我打造一种方法,在100周的时间里跟踪我的行动

我还是一名android新手,遇到了一个无法解释的问题

基本上,我使用ArrayAdapter填充了一个包含100个字符串的列表(Week1、Week2、Week3…Week100)

在每个文本视图上设置onclicklistener,以便当用户单击文本视图时,背景颜色将变为红色

但是,;每当我点击一个文本视图时——不止一个文本视图被着色

注:

  • 我正在使用滚动视图滚动整个列表。(填充后,100周列表将填满整个屏幕,滚动视图用于访问整个列表。)

  • 我还保存了对当前绘制的textview的引用,以便确保当用户单击其他textview时,前一个textview将丢失其红色背景

  • 主活动初始化:

    public class MainActivity extends ActionBarActivity 
    {
    TextView selectedWeek; // Reference to the selected week.
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        populateWeekList(); // Populating the ListView
        initWeekClick(); // Initializing click listener
    }
    
    填充列表视图:

    public void populateWeekList()
    {
        String[] weeks = new String [100]; // 100 weeks
        for (int i=0; i<100;i++)
        {
            weeks[i] = "Week"+(i+1);
        }
        ArrayAdapter<String> weekAdapter = new ArrayAdapter<String>(
                this,
                R.layout.weeksview,
                weeks
        );
    
        // R.id.weekTypeList is just a normal TextView.
        ListView weekList=(ListView) findViewById(R.id.weekTypeList); 
        weekList.setAdapter(weekAdapter);
    }
    
    public void populateWeekList()
    {
    字符串[]周=新字符串[100];//100周
    
    对于(int i=0;i ok,因为您滚动ListView <代码> GETView()/CUT>时,您的背景正在被拖动,它考虑当前的TeXView位置(作为当前视图)并在其上设置背景,因为它在<代码> OnCutter < /代码>监听器上检测到<代码> SETBASE()/代码>方法.< /P> 首先,我建议创建一个适配器
    扩展ArrayAdapter

    解决方案1:

    在文本视图上使用
    setTag()
    at
    onClick
    listener,如

    text.setTag(position);
    
    在它上面使用
    getTag()
    并放置条件

    if(holder.text.getTag().equals(position)){
        holder.text.setBackgroundColor(Color.BLUE);
    }else{
        holder.text.setBackgroundColor(Color.WHITE);
    }
    
    解决方案2:

    将此添加到
    onCreate
    方法

        ArrayList<String> _array = new ArrayList<String>();
        for(int i=0 ; i <1000; i ++){                       // 1000 value
            _array.add(i+"");                
        }
        list.setAdapter(new  MainAdapter(this, _array));        // pass you list here
    
    ArrayList\u array=new ArrayList();
    
    对于(inti=0;i)你所说的R.id.text是什么意思?什么是“text”您正在引用?这必须是动态的,用户可以单击100个文本视图中的任意一个。它是
    R.layout中
    TextView
    的id。weeksview
    由数组适配器创建了100次,我如何区分它们,我已经尝试将单击的视图传递到引用中,因此,从逻辑上讲,我应该是一个仅访问一个文本视图。问题是多个文本视图的背景已更改。例如:用户单击“Week1”,它将被涂成红色。-到目前为止还不错。但是,当向下滚动时,您会注意到“Week11”、“Week21”和“Week31”…等等,我也画了。我已经改变了我的答案…看一下…请根据你的改变变量。。
        ArrayList<String> _array = new ArrayList<String>();
        for(int i=0 ; i <1000; i ++){                       // 1000 value
            _array.add(i+"");                
        }
        list.setAdapter(new  MainAdapter(this, _array));        // pass you list here
    
    public class MainAdapter extends ArrayAdapter<String> {
    
        ArrayList<String> _st = new ArrayList<String>();
        ArrayList<Integer> check = new ArrayList<Integer>();
        Context _context;
        public MainAdapter(Context context,ArrayList<String> _st) {
            super(context,R.layout.main, _st);        // your inflate layout
            this._context = context;
            this._st = _st;
    
        }
        @Override
        public int getCount() {
            return _st.size();
        }
        @Override
        public long getItemId(int position) {
            return 0;
        }
        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
    
            //---//
    
            // check if current position is there in arraylist
            if(checking(position)){
                holder.text.setBackgroundColor(Color.BLUE);
            }else{
                holder.text.setBackgroundColor(Color.WHITE);
            }
            holder.text.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View arg0) {
                    // set background and put value in array list
                    holder.text.setBackgroundColor(Color.BLUE);
                    check.add(position);
    
                }
            });
            return convertView;
        }
    
        // this will check whether current position is there is array list or not and if it there it will break loop and return true
        public boolean checking(int position){
            boolean fine = false;
            for(int i=0; i<check.size();i++){
                if(position == check.get(i)){
                    fine = true;
                    break;
                }
            }
            return fine;
        }       
      }
      public class ViewHolder{
          TextView text;
      }
    }