ต้องการให้โชว์ 1,2,3ไปเรื่อยถึง 99 แต่นี้มันประมวลผลแล้วมาโชว์ 99 เลย
ณ ไฟล์ Systaxtest2Activity.java
package th.pureexe.console.syntaxtest2;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class Systaxtest2Activity extends Activity {
private TextView textv;
public void output(View v){
int i = 1;
while(i<100)
{
textv.setText(" "+i);
textv =(TextView)findViewById(R.id.textview);
sleep(100);
i++;
}
}
private void sleep(int x) {
int v,w,z;
for (v=0;v<x;v++)
{
for (w=0;w<128;w++)
{
for (z=0;z<128;z++)
{
}
}
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textv =(TextView)findViewById(R.id.textview);
}
}
code ใน class activity หลักจะทำงานที่ Main thread หรือ UI งับ ถ้า Loop หรือ sleep ที่นี้จะทำให้ ui ค้างจนกว่าจะจบ Loop / sleep
ลองไปศึกษาเรื่อง thread (runnable) ดูงับ
ก่อนอืนก้ขอโทษคุณ Teardrop ผมไม่ได้ กวนคุณนะครับ ผมว่าไม่ได้เกียวกับเรื่อง Thread ยังไงอะครับ ถ้าผมเข้าใจไม่ผิดผมว่า น่าจะเป็นการ AddView() มากกว่านะครับ
เอาง่ายๆๆ ครับ ลองเข้าไปแก้ layout/main โดยการ android:id=”@+id/test” =====> สร้าง ID ให้กับมันก่อน
ของ layout LinearLayout
แล้วคุณมาที่ function public void onCreate(Bundle savedInstanceState) {
LinearLayout l = (LinearLayout)findViewById(R.id.test);
// Loop เอาเองนะครับ
TextView txt = new TextView(this);
txt.setText(“1”);
l.addView(txt);
}
ผมว่าน่าจะประมาณนี้นะครับ ช่วยๆๆ กันตอบครับ คุณ Teardrop
จขกท เค้าใช้ findViewbyId() งับ คือน่าจะมี View นี้อยู่แล้วใน xml layout หรือ มาจากส่วนอื่นของ code แล้ว
แล้วก็ถ้าใช้ addView ใน loop 100 รอบ แบบนี้ ท่านจะได้ textview 100 textview อยู่บน layout นะงับ ^^’
ps จะว่าไป loop จขกท ก็ควรจะ findViewbyId ก่อนจะ settext ด้วยนะ :X
ถูกต้องแล้ว ครับผม
ผมว่า จขกท เค้าน่าจะต้องการให้ textview เดิมๆ นับเลขจาก 1 – 100 ไงงับ ไม่ใช่ว่าต้องการ textview 100 อัน ^^’
สังเกตุจากการที่เค้าใช้ findViewbyId + settext และ มี function sleep (เขียนเอง ?) อยู่ใน Loop ^^’
ซึ่งถ้าเขียนแบบนี้ ใน ui thread มันจะไม่ค่อยๆ show แล้ว sleep แต่มันจะ settext+sleep 100 ครั้งก่อนถึงแสดงผลครั้งเดียว ผมถึงแนะให้ลองศึกษาเรื่อง thread ^^’
function sleep อยู่ข้างล่าง บอร์ดโชว์ไม่หมด
ฟังชั่น sleep นะครับ
/*ใช้ถ่วงเวลา 1 ms เทียบ cpu 2.0GHZ*/ (วนfor 2^7^3 รอบ)
แล้วสรุปทำยังไงครับ มีแต่สร้าง 100 อัน ไม่มีค่อยๆไล่เลข
ใช้ class thread (runnable) ไงงับ และ function thread.sleep(int milsec) แทนงับ loop ในอีก thread แยกแล้วค่อยเรียกจาก thread นั้นมาที่ ui thread เพื่อ update edittext งับ
class SimpleThread extends Thread {
private Boolean _run = false;
private int times =20;
public SimpleThread(String str /*Name Thread */) {
super(str);
}
public void setRunning(Boolean _r){
_run = _r;
}
@Override
public void run() {
while (_run) {
try {
sleep(times);
} catch (InterruptedException e) {}
}
}
// ถ้าจะให้ ทำงาน
SimpleThread _thread = new SimpleThread(“SimpleThread”);
_thread.setRunning(true);
_thread.start();
// ถ้ัาจะหยุด
_thread.setRunning(false);
_thread = null;