我如何在 Java Android Studio 中 select 多个具有不同 ID 的 TextView,例如 findViewById(R.id.)

How can I select multiple TextViews with different IDs in Java Android Studio like findViewById(R.id.)

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

我有一个 EditText 和一个按钮,按下按钮时会突出显示 EditText 中的单词。 如果您在单个 TextView 中搜索它,它会完美地工作,因为我将 findViewById(R.id.textView1) 分配给它 但是如果我有超过 100 个 TextView 怎么办?我正在做一个很长的手册。 此外,XML 中的每个 TextField 都有不同的名称。 例如textView1、txView1、textView2、txVi1等

这可能是我需要做的吗?我找了很多地方都没找到。

我把部分 .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) 如果您只有一个 TextView,它也可以工作,但它有数百个。

谢谢

前将近300行XML代码(从这里开始都是一样的,绝大多数是TextView和ImageView)。 我将代码上传到 GitHub,因为在将代码粘贴到 post.

时出现错误

https://github.com/lautarovculic/activity_medicina

您可以为包含所有 TextViewViewGroup 分配一个 ID。然后通过 findViewById(R.id.viewgroup) 获取 ViewGroup 并遍历所有 ViewGroup 的子视图以获取其所有 TextView.

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

如果您想要更通用的方法,以防 TextView 可能不在同一个 ViewGroup 中。为最外层的 ViewGroup 分配一个 id 然后获取并将其作为参数传递给递归函数以获取所有子 TextView.

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

帮助您将其与 TextHighlighter

一起使用的代码片段
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);