Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.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
如何在Java Android Studio中选择具有不同id的多个文本视图,如findViewById(R.id.)_Java_Android_Textview_Android Edittext - Fatal编程技术网

如何在Java Android Studio中选择具有不同id的多个文本视图,如findViewById(R.id.)

如何在Java Android Studio中选择具有不同id的多个文本视图,如findViewById(R.id.),java,android,textview,android-edittext,Java,Android,Textview,Android Edittext,我正在做一个项目,这部分有一个搜索引擎的功能,突出显示搜索的单词 我有一个EditText和一个按钮,按下按钮时会突出显示EditText中的单词。 当我将findViewByIdR.id.textView1分配给它时,如果您在单个文本视图中搜索它,它将非常有效 但是如果我有超过100个文本视图,我该怎么办?我正在做一本很长的手册。 此外,XML中的每个文本字段都有不同的名称。 例如textView1、txView1、textView2、TXV1等 有可能我需要做什么吗?我找了很多地方,什么也没

我正在做一个项目,这部分有一个搜索引擎的功能,突出显示搜索的单词

我有一个EditText和一个按钮,按下按钮时会突出显示EditText中的单词。 当我将findViewByIdR.id.textView1分配给它时,如果您在单个文本视图中搜索它,它将非常有效 但是如果我有超过100个文本视图,我该怎么办?我正在做一本很长的手册。 此外,XML中的每个文本字段都有不同的名称。 例如textView1、txView1、textView2、TXV1等

有可能我需要做什么吗?我找了很多地方,什么也没找到

我留给您.java代码的一部分

public class Medicina extends AppCompatActivity {

EditText searchview;
Button btnBuscar;


boolean isHighlight = false;
TextHighlighter textHighlighter;

@Override
protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_medicina);



    searchview = (EditText)findViewById(R.id.searchview);
    btnBuscar = (Button)findViewById(R.id.btnBuscar);

    btnBuscar.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View view){
            if (!isHighlight){
                textHighlighter = new TextHighlighter();

                textHighlighter.setBackgroundColor(Color.parseColor("#FFFF00"))
                        .setBackgroundColor(Color.RED)
                        .addTarget()
                        .highlight(searchview.getText().toString(),TextHighlighter.BASE_MATCHER);
            }


            isHighlight = !isHighlight;
        }

    });


}
在.addTarget中,会出现findViewById R.id.lalala 如果你只有一个文本视图,它就可以工作,但是它有数百个

多谢各位

从这里开始的前300行XML代码都是一样的,绝大多数是TextView和ImageView。 我将代码上传到GitHub,因为在帖子中粘贴代码时会出现错误


您可以为包含所有文本视图的视图组分配id。然后通过findViewByIdR.id.ViewGroup获取ViewGroup,并循环遍历所有ViewGroup的子视图以获取其所有TextView

帮助您将其与TextHighlighter一起使用的代码段


请随问题附上activity_medicina的xml。activity_medicina的前300行中有3000多行,90%是xml代码的TextView,从现在开始都是一样的,绝大多数是TextView和ImageView。我将代码上传到GitHub,因为在帖子中粘贴代码时会出现错误。我想知道你传递给我的第一个代码应该放在哪里,以及在公共文本Highlighter addTarget中.java应该是什么样子{我收到一个错误addTarget说缺少一个;好的,我已经更新了我的答案。只需将方法getAllTextViewsSimple放在onCreate之外的活动中,因为我看到您将上一个方法放在onCreate中是错误的。在需要获取所有TextViews时调用getAllTextViewsSimple。我还添加了一段代码来帮助您使用它TextHighlighterReady!!!非常感谢!当我查找另一个单词时,前面突出显示的单词将被删除,并且不区分大小写,但这是一个小细节,现在不是优先事项,也不是帖子的情况。再次非常感谢!!
public List<TextView> getAllTextViewsSimple() {
    final List<TextView> result = new ArrayList<>();
    final ViewGroup viewGroup = findViewById(R.id.viewgroup);
    for (int i = 0; i < viewGroup.getChildCount(); i++) {
        final View v = viewGroup.getChildAt(i);
        if (v instanceof TextView) {
             result.add((TextView) v);
        }
    }
    return result;
}
public List<TextView> getAllTextViews(View v) {
    final List<TextView> result = new ArrayList<>();
    if (v instanceof ViewGroup) {
        final ViewGroup viewGroup = (ViewGroup) v;
        for (int i = 0; i < viewGroup.getChildCount(); i++) {
            result.addAll(getAllTextViews(viewGroup.getChildAt(i)));
        }
    } else if (v instanceof TextView) {
        result.add((TextView) v);
    }
    return result;
}
final List<TextView> allTextViews = getAllTextViewsSimple();
textHighlighter.setBackgroundColor(Color.parseColor("#FFFF00"))
                        .setBackgroundColor(Color.RED);

for (TextView tv : allTextViews) {
    textHighlighter.addTarget(tv);
}                    

textHighlighter.highlight(searchview.getText().toString(),TextHighlighter.BASE_MATCHER);