我是Android開發新手,仍然難以理解框架的工作原理。我嘗試寫一個簡單的遊戲來獲得一些經驗,我想請求下面的幫助。 在我的主要活動中,我有幾個TextViews來顯示我的遊戲中的各種數據,在那些我有一個名爲AnimatedView的自定義視圖中,它具有我爲遊戲本身繪製對象的畫布。基於Canvas上的對象,我想更新TextView以顯示例如對象的數量,玩家的等級等等。從自定義視圖更新Android UI
問題是,即使我可以用下面的代碼獲得TextView對象,當我調用textView.setText(...)時,沒有任何更改UI。
下面是我真正的代碼的簡化版本,來演示該問題:
activity_main.xml中
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
...
tools:context="com.danielsh.test.teststuff.MainActivity"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/myTextView"
android:text="Change this!" />
<com.danielsh.test.teststuff.AnimatedView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/animView" />
</LinearLayout>
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
AnimatedView.java
public class AnimatedView extends View {
public AnimatedView(Context context, AttributeSet attrs) {
super(context, attrs);
final Handler uiHandler = new Handler();
final Runnable runnable = new Runnable() {
public void run() {
LayoutInflater inflater = LayoutInflater.from(getContext());
LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.activity_main, null, false);
TextView textView = (TextView) layout.findViewById(R.id.myTextView);
textView.setText("" + (System.currentTimeMillis()/1000));
textView.invalidate();
}
};
uiHandler.postDelayed(runnable, 1000);
}
}
我認爲我不符合實際的TextView對象,對UI的可視工作,但不知道是什麼了這樣做的正確方法。
任何幫助或指向處理相同問題的現有職位的指針將不勝感激。
您是否嘗試過'textView.invalidate();'設置好文字後 –
@SatyenUdeshi textView.invalidate();對我沒有任何影響。 –
@tynn handler.postDelayed()確實更好,不幸的是它有同樣的問題。 –