【发布时间】:2013-07-23 05:01:25
【问题描述】:
有没有办法在只执行一次方法后停止可运行对象?
我创建了这段代码来延迟“getPreferences”方法的启动,但是当我运行应用程序时,“getPreferences”发送给我的下一个活动会出现屏幕刷新问题?
这是否归结为可运行对象仍在继续循环,以及如何在一次执行后将其杀死?
import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.view.Menu;
public class StartScreen extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start_screen);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
getPreferences();
}}, 10000);
}
private void getPreferences() {
// TODO Auto-generated method stub
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
String name = sharedPreferences.getString("NAME", "");
if (name != null) {
// the key does not exist
Intent intent=new Intent(StartScreen.this,InitialPreferences.class);
startActivity(intent);
}
if (name == "NAME"){
// handle the value
Intent intent=new Intent(StartScreen.this,MainActivity.class);
startActivity(intent);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.start_screen, menu);
return true;
}
}
InitialPreferences 活动性....
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
public class InitialPreferences extends StartScreen implements OnClickListener {
EditText editText1;
Button button1;
TextView textView1;
RadioGroup radioGroup;
RadioButton radioPosistionButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.initial_preferences);
// waitTimer.cancel();
textView1 = (TextView)findViewById(R.id.textView1);
editText1 = (EditText)findViewById(R.id.editText1);
button1 = (Button)findViewById(R.id.button1);
radioGroup = (RadioGroup) findViewById(R.id.radioGroup);
}
@Override
protected void onStart(){
//waitTimer.cancel();
LoadPreferences();
super.onStart();
}
private void SavePreferences(String key, String value){
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(key, value);
editor.commit();
}
private void LoadPreferences(){
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
String name = sharedPreferences.getString("NAME", "");
textView1.setText(name);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
SavePreferences("NAME", editText1.getText().toString());
// get selected radio button from radioGroup
int selectedId = radioGroup.getCheckedRadioButtonId();
// find the radio button by returned id
radioPosistionButton = (RadioButton) findViewById(selectedId);
}
}
【问题讨论】:
-
等等,这里有什么问题?您所说的“导致屏幕刷新问题”的问题是什么?你能解释更多吗?另外,请问您为什么要使用
Runnable()开始活动? -
嗨,对不起,如果我的问题含糊不清。是的,下一个活动,无论是初始偏好还是主要活动,在 10 秒后都会重新加载@lalit poptani,谢谢今晚读完。
-
@LalitPoptani 嗨,我一直在查看您之前指示我的答案,您能告诉我如何将其合并到我的代码中吗?谢谢
-
@J4C3N-14 我已经编辑了我的答案。我认为问题在于您在 InitialPreference 而不是 Activity 中扩展 StartScreen。我建议您查看 PreferenceActivity 以从您的 InitialPreferences 扩展(请参阅我的答案中的链接)
标签: android loops handler delay runnable