Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.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
android view.findViewById和activity.findViewById无法显示数据_Android - Fatal编程技术网

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