首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android:在onCreate()方法之外更新onCreate

Android:在onCreate()方法之外更新onCreate
EN

Stack Overflow用户
提问于 2018-04-14 12:04:59
回答 3查看 324关注 0票数 0

我有一个onCreate方法,在这个方法中,我用一个空字符串数组创建一个ArrayAdapter,然后调用一个AsyncTask,它返回一个字符串数组,我想用它来更新ArrayAdapter,但是我这样做是行不通的:

代码语言:javascript
复制
public class FillTransportPlaceActivity extends AppCompatActivity {

    public static String[] lines = new String[13];
    public static ArrayAdapter<String> arrayAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_fill_transport_place);

         arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, lines);
         new transportDB().execute(metroText); // AsyncTask method which return me the String[] array.
         MaterialBetterSpinner materialDesignSpinner = findViewById(R.id.listLines);
         materialDesignSpinner.setAdapter(arrayAdapter);
    }
}

在onPostExecute(String[] result)方法的AsyncTask中,我调用updateAdapter(String[]结果)函数:

代码语言:javascript
复制
private class transportDB extends AsyncTask<String, String[], String[]> {

    @Override
    protected void onPreExecute() {

    }

    @Override
    protected String[] doInBackground(String... strings) {
       return DB_transportPlace.getLines(strings[0]);
    }

    @Override
    protected void onPostExecute(String[] result) {
       updateAdapter(result);
    }

    public static void updateAdapter(String[] result) {
       for(int i = 0; i < 14; i++) {
          arrayAdapter.add(result[i]);
       }
       //arrayAdapter.addAll(lines);
       //arrayAdapter.notifyDataSetChanged();
    }

如您所见,我尝试过不同的方法,如addAll()和notifyDataSetChanged(),但我不确定是否正确地使用了这些方法。

我想要做的是用MaterialDesignSpinner返回的数组的内容填充AsyncTask,如果有人知道任何其他选项,我会接受任何建议,谢谢,任何帮助都会被接受!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-04-14 16:27:48

所有的答案都没有提供给我,但我终于找到了一个解决办法,我把它放在这里,以防有人需要它:

代码语言:javascript
复制
public class FillTransportPlaceActivity extends AppCompatActivity {

    private ArrayList<String> list;
    private ArrayAdapter<String> arrayAdapter;
    private MaterialBetterSpinner spinner;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fill_transport_place);

        Toolbar tb = findViewById(R.id.toolbar_center);
        setSupportActionBar(tb);
        ActionBar ab = getSupportActionBar();
        ab.setDisplayHomeAsUpEnabled(true);
        ab.setHomeAsUpIndicator(R.drawable.ic_arrow_back);

        list = new ArrayList<>();
        arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
        spinner = findViewById(R.id.listLines);


        SharedPreferences sp = getApplicationContext().getSharedPreferences("transportButton", 0);
        boolean metro = sp.getBoolean("metro", false);
        boolean bus = sp.getBoolean("bus", false);

        if(metro) {
            String metroText = "metro";
            new transportDB().execute(metroText);
            spinner.setAdapter(arrayAdapter);
        } else {
            if (bus) {
                String busText = "bus";
                new transportDB().execute(busText);
                spinner.setAdapter(arrayAdapter);
            }
        }
    }
}

    public void updateAdapter(String[] result) {
        arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, result);
        spinner.setAdapter(arrayAdapter);
}

非常感谢你的帮助!

票数 0
EN

Stack Overflow用户

发布于 2018-04-14 12:45:14

首先,您不应该将包含空对象的数组设置为数组适配器,这会导致NullPointerException

您可以这样更新您的arrayAdapter:

代码语言:javascript
复制
 sp = findViewById(R.id.someSpinner);

ArrayList<String> list = new ArrayList<>();

final ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, list);


sp.setAdapter(adapter);

list.add("Hello");
list.add("How are you");
adapter.notifyDataSetChanged();
票数 0
EN

Stack Overflow用户

发布于 2018-04-14 13:04:24

代码语言:javascript
复制
 public static void updateAdapter(String[] result) {

         arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, result);
     materialDesignSpinner.setAdapter(arrayAdapter);
    }

试试上面的代码

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49831242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档