Spinner项目未在第一时间显示

时间:2014-08-15 06:19:31

标签: java android

我有活动 - StartupActivity MainActivity

在StartupActivity中,我在表中插入一些数据,并使用intent来启动MainActivity。

StartupActivity 中的代码:

db.addFriend("userNameTest"); //db is a DataBase handler class and has been initialized inside onCreate()
Intent home = new Intent(StartUp.this, MainActivity.class);
startActivity(home);
finish();

数据插入成功,我可以在数据库表中看到它们。此外,MainActivity正在正常启动。

在MainActivity中我正在从表中检索数据并在微调器中显示。

MainActivity 的onCreate方法中的代码:

 List<String> list = db.getFriends();

 dataAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, list);
 dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
 friendSpinner.setAdapter(dataAdapter);
 friendSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id)
                       { String frnd_name = (String)dataAdapter.getItem(position); }
                @Override
                public void onNothingSelected(AdapterView<?> adapter) {  }
            });

Spinner第一次没有显示任何数据,但是如果我按下后退按钮而不是再次导航回活动,它会在微调器中显示数据。另外,它只在安装时首次运行时显示数据;之后,每次运行都会显示数据。

这可能是什么原因?请帮帮我。

另一件事也会有所帮助。如果我在表中添加一些数据,然后尝试刷新微调器或微调器本身的dataAdapter。我怎么会这样做?现在,我只是再次使用上面的代码;因为我已经尝试过dataAdapter.notifyDataSetChanged(); - 这是没有用的。

2 个答案:

答案 0 :(得分:0)

变化:

dataAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, list);

要:

dataAdapter = new ArrayAdapter<String>(getApplicationContext(),
        android.R.layout.simple_spinner_item, list);

答案 1 :(得分:0)

可能是这样的,因为从db获取该列表可能需要一段时间,您的应用程序可以直接转到您声明dataAdapter的下一行代码。

您可以尝试使用AsyncTask。这样的事情应该会有所帮助;

`class GetList extends AsyncTask<String, Void, List<String>> {

 @Override
 protected void onPreExecute() {
     super.onPreExecute();
     pDialog = new ProgressDialog(MainActivity.this);
     pDialog.setMessage("Getting List...");
     pDialog.setIndeterminate(false);
     pDialog.setCancelable(true);
     pDialog.show();
 }

 @Override
 protected List<String> doInBackground(String... args) {
     List<String> list = db.getFriends();

     ...

     return list;
 }
 @Override
 protected void onPostExecute(List<String> result) {
     pDialog.dismiss();
     ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, list);
     dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
     friendSpinner.setAdapter(dataAdapter);
 }

}`

在onCreate()方法中;

`GetList getList = new GetList();
 getList.execute();`

希望这有帮助。