当用户点击菜单中的项目时,onOptionsItemSelected
会将MenuItem
作为参数触发。这个传递MenuItem
扩展了TextView
,与我们从menu.findItem()
方法得到的不同。
要访问此用户需要单击该项目,我想访问此对象而无需用户单击菜单中的项目。
答案 0 :(得分:2)
在On resume中只需调用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);
答案 1 :(得分:0)
我无法在上面的答案中发表评论,所以我写了另一个答案。了解视图实际放置在屏幕上的更可靠方法是观察它的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);
}
}
}