私はAndroid開発が初めてで、フレームワークの仕組みを理解するのが難しいです。私はいくつかの経験を得るためにシンプルなゲームを書こうとしています。私は以下にいくつかの助けを求めたいと思います。 私の主なアクティビティでは、ゲームからのさまざまなデータを表示するためのTextViewがいくつかあります。その下に、ゲーム自体のオブジェクトを描画するキャンバスを持つAnimatedViewというカスタムビューがあります。キャンバス上のオブジェクトに基づいて、TextViewsを更新して、たとえば次のように表示したいと思います。オブジェクトの数、プレイヤーのレベルなど。カスタムビューから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);
}
}
私はUIに見えるの実際のTextViewオブジェクトで作業していないんだけど、わからないwhat'dはそれを行うための正しい方法であることを前提としています。
同じ問題を扱う既存の投稿へのヘルプやポインタは、大変ご満足いただけます。
テキストを設定した後、 'textView.invalidate();'を試しましたか? –
@SatyenUdeshi textView.invalidate();私のために違いはありません。 –
@tynn handler.postDelayed()は実際にはより良いですが、残念ながら同じ問題があります。 –