android view.findViewById和activity.findViewById无法显示数据
我在android view.findViewById和activity.findViewById无法显示数据,android,Android,我在view.findViewById和activity.findViewById之间遇到问题。 考虑到这一点,当我使用view.findViewById时,数据将不会显示,并且根本没有错误报告。当我使用activity.findViewById时,一切都很好。我不知道为什么或者我是否犯了任何错误。请给我一些建议 主活动代码 public class MainActivity extends AppCompatActivity { ViewManager viewManager;
view.findViewById
和activity.findViewById
之间遇到问题。
考虑到这一点,当我使用view.findViewById时,数据将不会显示,并且根本没有错误报告。当我使用activity.findViewById
时,一切都很好。我不知道为什么或者我是否犯了任何错误。请给我一些建议
主活动代码
public class MainActivity extends AppCompatActivity {
ViewManager viewManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewManager=new ViewManager(this);
viewManager.setText("hello");
}
}
视图管理器代码
public class ViewManager {
private AppCompatActivity activity;
ViewManager(AppCompatActivity activity){
this.activity=activity;
}
public void setText(String text){
//in this way the word"hello" cannot be shown
View view= LayoutInflater.from(activity).inflate(R.layout.activity_main,null);
TextView textView=view.findViewById(R.id.tv);
//this way it works but i dont know why i m wrong above
//TextView textView=activity.findViewById(R.id.tv);
textView.setText("hello");
}
}
您正在创建一个单独的视图层次结构,它与您的活动布局没有链接,所以屏幕上不会发生任何事情 因此,您可以将
视图
参考设置为活动
的布局
public void setText(String text){
View view= LayoutInflater.from(activity).inflate(R.layout.activity_main,null);
activity.setContentView(view);
//^^^^^^^^^^^^^^^^^^^^^^
TextView textView=view.findViewById(R.id.tv);
//this way it works but i dont know why i m wrong above
//TextView textView=activity.findViewById(R.id.tv);
textView.setText("hello");
}
和
setContentView(R.layout.activity\u main)代码>不再需要您正在布局中的视图上设置未显示的文本。一旦在ViewManger
中膨胀R.layout.activity\u main
,就不会将视图添加到活动本身膨胀的视图中(布局作为参数传递给setContentView
)。它与“活动”一起工作的原因是,在这种情况下,“活动”将查看通过setContentView
传递的视图,即可见的布局。问题是您的“活动”的布局已通过使用此行膨胀:
setContentView(R.layout.activity_main);
因此,如果你在活动中打电话:
TextView textView=findViewById(R.id.tv);
textView.setText("hello");
如果活动的布局不正确,则会导致此视图的父视图失效。
您在ViewManager中所做的事情是膨胀一个新视图,该视图不绑定到任何组件。因此,您应该在何处显示文本视图。
这将是解决方案:
public void setText(String text){
TextView textView=activity.findViewById(R.id.tv);
textView.setText("hello");
}