Android 我有200个文本视图,我想知道哪一个被按下,然后如何更改文本

Android 我有200个文本视图,我想知道哪一个被按下,然后如何更改文本,android,textview,gettext,settext,Android,Textview,Gettext,Settext,我有个问题。。。我已经考虑了一段时间,一直在网上寻找,但仍然没有找到一个明确的解释 我有很多文本视图,并为每个视图设置了onClickListeners。。当用户单击其中一个时,我希望他们能够将文本更改为另一组字符串数组选项,这是我通过编程创建的。当用户选择一个选项时,文本应更改为他们选择的选项。(也就是说,TextView是A,现在是B。希望这有意义……无论如何……) 当前的解决方案是为每个TextView设置一个OnClickListener,当有人按下它时,会显示一个单独的对话框。但我发现

我有个问题。。。我已经考虑了一段时间,一直在网上寻找,但仍然没有找到一个明确的解释

我有很多文本视图,并为每个视图设置了onClickListeners。。当用户单击其中一个时,我希望他们能够将文本更改为另一组字符串数组选项,这是我通过编程创建的。当用户选择一个选项时,文本应更改为他们选择的选项。(也就是说,TextView是A,现在是B。希望这有意义……无论如何……)

当前的解决方案是为每个TextView设置一个OnClickListener,当有人按下它时,会显示一个单独的对话框。但我发现,如果我这样做,代码将是如此之长,它将需要一个永恒的代码,所以我希望有人有一个更优雅的方式编码这么长的过程=(

所以我想我的问题是…1)有没有一种方法可以找出按下哪个文本视图,然后在单个方法中更改按下的文本视图的文本?为了避免我必须编写1000个警报对话框


对所有文本使用设置id,其中设置id正整数(不同),然后在视图单击侦听器上设置一个(全部设置),在该侦听器中捕获所有文本视图单击(带textview的向下播放视图)在侧面,它放置了一个开关盒,您可以在其中处理单击文本视图的单击操作。

实现所需操作的方法之一是使用文本视图
setTag()
getTag()
方法

在文本视图的
init
上,使用
setTag()
设置一些值来标识视图


在on click事件中,在view参数上使用
getTag()
,以了解单击了哪个视图。

我建议您使用网格视图。 您可以看到按下了哪个textview,如下所示:

gridView.setOnItemClickListener(new OnItemClickListener() {
  @Override
  public void onItemClick(AdapterView<?> parent, View v, int position,
      long id) {

 //get id
      switch (v.getId()) {
          case R.id.textView1: ...
  }
});
    private class customOnClickListener implements CompoundButton.{
    public void OnClick(View view){
        int position = (Integer) view.getTag()
        ///Do more code here - your processing
    }
}
gridView.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共控件单击(AdapterView父对象、视图v、内部位置、,
长id){
//取得身份证
开关(v.getId()){
案例R.id.textView1:。。。
}
});

我建议将文本视图保存在一个数组中,如下所示:

TextView[] textViewArray = new TextView[textViewCount];
然后使用for循环为每个循环分配一个整数标记-它的位置

textViewArray.setTag(i)
并再次使用for循环向每个侦听器添加onClickListener:

textviewArray[i].setOnClickListener(etc...)
然后,单击其中一个时,您可以使用获取已单击视图的位置。这将需要在您的:

textviewArray.setOnClickListener(new customOnClickListener())
您的customOnClickListner如下所示:

gridView.setOnItemClickListener(new OnItemClickListener() {
  @Override
  public void onItemClick(AdapterView<?> parent, View v, int position,
      long id) {

 //get id
      switch (v.getId()) {
          case R.id.textView1: ...
  }
});
    private class customOnClickListener implements CompoundButton.{
    public void OnClick(View view){
        int position = (Integer) view.getTag()
        ///Do more code here - your processing
    }
}
希望这是有道理的:) 对于For循环,您可以使用For(i=0,i您必须在所有textview上设置“onClickListner”。 为了节省一些代码长度,我建议您为对话框创建一个函数,并为其提供一些int参数,这将由textview的clickListener直接调用, 像

使函数自定义对话框类似于

  public void CustomDialog(int i){
   if(i==1){
    //Do something
   }   
  }

为什么你需要200个文本视图?你能展示你的布局图吗?它可能会帮助其他人提出更好的选择(例如,如果你能改成列表,它将提供更好的性能,并允许你在OnItem listener上这样做)我认为在这种情况下使用ListView可能是个好主意,但我不确定??您好,我在这里附加了一个我的xml布局的png,并考虑使用ListView/GridView布局…可能最好到现在为止,因为我可以看到它所带来的好处。特别是在编程时…我猜当我是一个初学者时会发生什么…不熟悉其他策略…那就是谢谢你的回答。您好,我想使用gridview,但并不真正理解如何编写一个…我认为这是一个很好的策略,将尝试先在较小的范围内编写一个,然后再从那里开始。问题是,您可以随意使列和行可见和不可见吗?当然可以…如果您看一下我的png图片,您可以你可以看到我的布局,然后你就会明白为什么我使用基本布局,这样我就可以更改表格行和名称等。希望这有意义…谢谢你,我会研究一下…嘿,我今天查看了gridview,意识到你不能水平滚动。这是真的吗?如果是这样的话,这是不需要遵循某些模式,但正如您在我所编写的xml布局的图片中看到的,我需要它水平和垂直滚动,因为我希望最多有40名学生,所以这个策略可能并不理想……除非我在水平滚动时遗漏了一些东西……嘿,谢谢……我正在考虑使用if语句来查看哪个单击textview,然后执行getClicked或识别单击哪个textview的操作,然后将setText方法应用于该textview,而无需说明实际单击了哪个textview…例如,执行类似getTextSelected()的方法。setText(“a”);与此textViewStudent1.setText(“a”)进行比较;正如您所看到的,如果我使用第一个,我只需获取单击的textview的内容并对其进行更改,而不是对每个个人id进行编码,然后进行更改。感谢您的建议,我们将查看它=)嘿,谢谢你的回答…我是一个初学者,但我愿意学习..所以我会研究这个方法,看看我是否可以使用它。我喜欢数组的想法..我已经为我的所有文本视图设置了一个onClickLIstener,所以当用户单击一个时,我知道单击了哪个文本视图..我想问题是当它被单击时,我必须编程一个di因为我不知道一个getText方法,在该方法中,我可以识别单击了哪个textview,然后为该textview分配一个.setText(“a”)。就像view.getTag()所做的那样?我可以使用这行代码?然后分配一个setText();方法…它将识别单击了哪个文本视图,然后更改它…希望这有意义…谢谢你的回复…=)为什么会被否决,我不明白。帮了我大忙。谢谢。嘿,谢谢,会调查的…看起来很好,很简单