0

我已经开始在不久前开发一个小型项目,主要目标是为我在100周的过程中跟踪自己的行为。TextView更改适用于使用ListView和ArrayAdapter的多个TextView

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

基本上我已经填充使用一个ArrayAdapter与含有100个字符串(Week1,Week2,译员更加... Week100)

在每个TextViews的设置一个onclicklistener列表一个ListView使得当用户执行点击一个textview,背景颜色会变成红色。

但是;每当我点击一个文本视图 - 不止一个文本视图被着色。

注:

  1. 我使用的是滚动型在整个列表中滚动。 (一旦填充,100周的列表填满整个屏幕,滚动视图用于访问整个列表)。

  2. 我还保存了对当前绘制的textview的引用,所以我可以确保当用户点击不同的文本视图,前一个将失去红色背景。

MainActivity的初始化:

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 
} 

填充ListView控件:

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); 
} 

代码初始化onClickListener和保存selectedWeek参考:

public void initWeekClick() 
{ 
    ListView weekList=(ListView) findViewById(R.id.weekTypeList); 
    weekList.setOnItemClickListener(new AdapterView.OnItemClickListener() 
    { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View viewClicked, int position, long id) 
     { 
      if (selectedWeek != null) 
      { 
       selectedWeek.setBackgroundColor(0); 
      } 
      TextView clicked = (TextView) viewClicked; 

      // Change clicked TextView color to red. 
      clicked.setBackgroundColor(getResources().getColor(android.R.color.holo_red_light)); 

      // Save the selected week reference 
      selectedWeek = clicked; 
     } 
    }); 
} 

回答

0

好吧,你的背景被洗牌,因为当你滚动你的ListView getView()被调用,它考虑(如当前视图)您当前的TextView的位置,并设置背景就可以了,因为它检测setBackground()方法在onClick监听器就可以了..

首先,我建议在onClick听众对你忒

使用setTag():创建适配器extends ArrayAdapter<?>

解决方案1 xt视图像..

text.setTag(position); 

和它上面使用getTag()并把条件

​​3210

解决方案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 

一个ArrayAdapter类:

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; 
    } 
} 

我没有多少我是在此代码道德......但是当你指定你有 value.I已经测试了价值和它的工作

我不是专家,所以让我知道如果我错了地方

希望工程!

+0

R.id.text是什么意思?什么是你正在引用的“文本”? 这必须是动态的,用户可以点击100个TextView中的任何一个 –

+0

它是在'R.layout.weeksview'中的'TextView'的id。 – Mohit

+0

由Array Adapter创建100次,我如何区分他们,我试着将点击的视图传递给一个引用,因此,从逻辑上讲,我应该只访问一个TextView。 –

相关问题