当用户单击菜单中的项目时,onOptionsItemSelected
触发传递MenuItem
作为参数。 这个传递MenuItem
扩展了TextView
,与我们从menu.findItem()
方法中获得的不一样。 要访问此用户需要单击该项目,我想访问此对象而无需用户单击菜单中的项目。
在恢复中,只需调用 findViewById 并将其强制转换为 TextView。 您需要在 Timer 中执行此操作以延迟代码,直到视图变红,因为它由菜单呈现。 对我来说,它是这样工作的
if (!created) { // for first resume only
created = true;
Timer t = new Timer();
t.schedule(new TimerTask() { // Might be done in better way, dont know yet
@Override
public void run() {
try {
while true {
final Object o = findViewById(R.id.mServerTime);
if (o == null) {
try {
Thread.sleep(1000);
} catch (Exception exp) {
}
} else {
if (o != null && o instanceof TextView) {
runOnUiThread(new Runnable() {
@Override
public void run() {
((TextView) o).setTextColor(Color.WHITE);
}
});
}
break;
}
}
}catch (Exception exp) {}
}
},1000);
我无法在上面的答案中发表评论,所以我正在写另一个答案。了解视图何时实际放置在屏幕上的更可靠方法是观察它的ViewTreeObserver,例如:
public class ActivityMain extends Activity {
// Instance variables
OnLayoutReadyListener onLayoutReadyListener = new OnLayoutReadyListener();
View v;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
v = findViewById(R.id.mServerTime);
v.getViewTreeObserver().addOnGlobalLayoutListener(onLayoutReadyListener);
}
class OnLayoutReadyListener implements ViewTreeObserver.OnGlobalLayoutListener {
@Override
public void onGlobalLayout() {
// this will be called once view V is placed and measured on the screen
v.setTextColor(Color.WHITE);
// remove this listener to prevent any additional callbacks
v.getViewTreeObserver().removeOnGlobalLayoutListener(onLayoutReadyListener);
}
}
}