Re: [問題] 使用Handler+AlertDialog 畫面閃爍

看板AndroidDev作者 (code)時間13年前 (2013/05/21 00:39), 編輯推噓2(2015)
留言17則, 3人參與, 最新討論串2/2 (看更多)
因為用講解的方式有點難理解我的問題,所以小弟放上一些code,更容易讓人瞭解好了 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ContactTimer = new Timer(); ContactsetTimerTask(); delBtn = (Button) findViewById(R.id.delBtn); delBtn.setOnClickListener(del); Intent intent2=new Intent(); intent2.setClass(MainActivity.this,fileread.class); startActivityForResult(intent2, ReadAllData); } private OnClickListener del = new OnClickListener(){ public void onClick(View v) { if (ContactTimer != null) { ContactTimer.cancel(); ContactTimer = null; } else { ContactTimer = new Timer(); ContactsetTimerTask(); } // 一樣利用AlertDialog 讓使用者輸入 + 多選功能 for(int i=0;i<names.length;i++)isChecked[i]=false; Builder DelAlertDialog = new AlertDialog.Builder(MainActivity.this); DelAlertDialog.setTitle("Del").setMultiChoiceItems( names, isChecked, onChoice) .setPositiveButton("Delete", showSelectedResult) .setNegativeButton("Discard", null).show(); } private OnMultiChoiceClickListener onChoice = new OnMultiChoiceClickListener(){ ............ } DialogInterface.OnClickListener showSelectedResult = new DialogInterface.OnClickListener(){ ............ } private void ContactsetTimerTask() { ContactTimer.schedule(new TimerTask() { @Override public void run() { Message message = new Message(); message.what = 1; ContactTimerHandler.sendMessage(message); } }, 1000, 1000); } private Handler ContactTimerHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); int msgId = msg.what; switch (msgId) { case 1: Intent intent=new Intent(); intent.setClass(MainActivity.this,fileread.class); startActivityForResult(intent, ReadAllData); break; default: break; } } }; public void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case ReadAllData: names= data.getExtras().getString("SDstr").split("\n"); isChecked = new boolean[names.length]; break; } } 希望放上code,能更快的解決問題,謝謝大家 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.0.248.229 ※ 編輯: fake01 來自: 123.0.248.229 (05/21 00:40) ※ 編輯: fake01 來自: 123.0.248.229 (05/21 00:44)

05/21 10:29, , 1F
ContactTimer.schedule(task, 1000, 1000) 改成
05/21 10:29, 1F

05/21 10:29, , 2F
ContactTimer.schedule(task, 1000) 有人猜對了
05/21 10:29, 2F

05/21 10:30, , 3F
程式只會照你所寫的跑,一秒閃一次啊XD
05/21 10:30, 3F

05/21 10:30, , 4F
BTW,你寫java的習慣好差= =
05/21 10:30, 4F

05/21 12:43, , 5F
原來是我搞不清楚 (task,1000,1000) 和 (task ,1000)
05/21 12:43, 5F

05/21 12:43, , 6F
的差異
05/21 12:43, 6F

05/21 12:44, , 7F
l大可以給我一些 習慣的建議嗎,讓人看懂程式碼
05/21 12:44, 7F

05/21 12:44, , 8F
也是很重要的功夫
05/21 12:44, 8F

05/21 14:21, , 9F
http://ppt.cc/meuv 自己找找java code convention
05/21 14:21, 9F

05/21 16:32, , 10F
感謝 會很有幫助
05/21 16:32, 10F

05/22 02:40, , 11F
我猜對了嗎XD
05/22 02:40, 11F

05/22 10:50, , 12F
但是若改成L大所講,會造成我若有新增刪除Dialog內容
05/22 10:50, 12F

05/22 10:50, , 13F
再次打開Dialog 會無法及時顯示資料
05/22 10:50, 13F

05/22 10:51, , 14F
需要等個幾秒才能正常顯示,就好像handler 沒有一秒執行一次
05/22 10:51, 14F

05/22 10:52, , 15F
handler我是用來呼叫其他.activity回傳值
05/22 10:52, 15F

05/22 11:50, , 16F
你要不要考慮另外開一篇問啊?你架構應該很有問題
05/22 11:50, 16F

05/22 12:00, , 17F
目前想到用別種方式處理,如還有問題會在開一篇 佔空間 XD
05/22 12:00, 17F
文章代碼(AID): #1Hcb6jtt (AndroidDev)
文章代碼(AID): #1Hcb6jtt (AndroidDev)