我有一个侦听器,它只是更改按钮的文本并为用户计时。我也有一个textview,当用户计时时,它应该更改为新的总工作时间。我仔细检查了xml,以确保我抓住了正确的R.Id,并且在侦听器中的按钮不是在TextView中。这是代码:

public class HoursListener implements OnClickListener{

GlobalApp appState;
Button startStopHoursButton;
TextView hoursTotalTextView;
public boolean clockedIn;

public HoursListener(Context ctx){
    appState = ((GlobalApp)ctx.getApplicationContext());
}

public void onClick(View v) {
    startStopHoursButton = (Button) v.findViewById(R.id.hourstogglebutton);
    hoursTotalTextView = (TextView) v.findViewById(R.id.totalWorktimeTextView);
    if(!clockedIn){
        startStopHoursButton.setText(R.string.clockout);
        appState.getCurrentCompany().getCurrentNewWeeklyTimestamp().CreateFinishTimeStamp();
        clockedIn = true;
    }else{
        startStopHoursButton.setText(R.string.clockin);
        appState.getCurrentCompany().getCurrentNewWeeklyTimestamp().CreateFinishTimeStamp();
        clockedIn = false;
        hoursTotalTextView.setText(appState.getCurrentCompany().getCurrentNewWeeklyTimestamp().totalTimeDoneThisWeekToString());
    }
}


}

这是textView的xml:

<TextView
        android:id="@+id/totalWorktimeTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textView2"
        android:text=""
        android:textAppearance="?android:attr/textAppearanceSmall"/>


错误是与此行:

hoursTotalTextView.setText(appState.getCurrentCompany().getCurrentNewWeeklyTimestamp().totalTimeDoneThisWeekToString());


我当时正在考虑只是将代码放入活动本身,但我觉得可以这样做。我想要可以像侦听器那样调用的东西,这样可以减少代码中的冗余。我已经仔细检查了hoursTotalTextView为空。但是按钮不是。有任何想法吗?

Eclipse的屏幕截图(链接到完整版),显示相关值不为null:
android - TextView返回null-LMLPHP

最佳答案

大概您正在听其点击的onClickListener是按钮吗? onClick传递了被单击的View v(即按钮),而文本框不是该按钮的子级,因此找不到它。

如果在您的活动中声明了HoursListener,则只需执行findViewById而不是v.findViewById,即。

hoursTotalTextView = (TextView) findViewById(R.id.totalWorktimeTextView);


如果不是,则将textview传递到HoursListener构造函数中,并在那里设置hoursTotalTextView(请记住,这可能会导致内存泄漏)。

09-27 15:03
查看更多