如何在Java Android Studio中选择多个具有不同id的TextView,如findViewById(R.i



我正在做一个项目,它在一定程度上具有搜索引擎的功能,可以突出显示所搜索的单词。

我有一个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,因为在帖子中粘贴时会出现错误。

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

最新更新