2015-11-23 122 views
0

我膨胀的布局activity_main,但是当我点击一个按钮什么都没有发生,textview没有更新。 下面是代码:膨胀的视图不更新

private int clicks = 0; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    LayoutInflater li = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); 
    WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); 

    WindowManager.LayoutParams params = new WindowManager.LayoutParams(
      WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, 
      WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, 
      PixelFormat.TRANSLUCENT); 

    params.gravity = Gravity.RIGHT | Gravity.TOP; 
    View myview = li.inflate(R.layout.activity_main, null); 

    wm.addView(myview, params); 

    Button button = (Button)findViewById(R.id.button); 
    TextView textview = (TextView)findViewById(R.id.textview); 

    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      clicks +=1; 

      textview.setText("Clicks: " + clicks); 
     } 
    }); 
} 

它看起来像点击在第一activity_mainsetContentView(R.layout.activity_main);)按钮更新TextView的,而不是一个在充气视图(一个是在前面)。

为什么会发生这种情况,以及如何使点击按钮更新充气视图中的textview?

另外,有没有办法只有充气的看法?如果我删除setContentView(R.layout.activity_main);应用程序崩溃。

+1

您为什么要再次为activity_main充气? –

回答

2

如果textview包含膨胀视图中,您需要指定您正在搜索该视图,当你调用findViewById()

TextView textview = (TextView) myview.findViewById(R.id.textview);

你必须做同样的按钮。

如果你想让它成为唯一的视图,最后你必须调用setContentView。这可能是因为您使用了findViewById()而导致崩溃,我认为这是内在地搜索当前视图(在设置内容视图之前为空)。

2

离开LayoutInflater,setContentView()为你做。

private int clicks = 0; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Button button = (Button)findViewById(R.id.button); 
    TextView textview = (TextView)findViewById(R.id.textview); 

    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      clicks +=1; 

      textview.setText("Clicks: " + clicks); 
     } 
    }); 

}

这就是你需要的。