【问题标题】:Changed colors after using AsyncTask使用 AsyncTask 后更改颜色
【发布时间】:2017-03-23 08:47:24
【问题描述】:

我的应用程序有问题。是电话簿。使用 AsyncTask 后所有颜色都变了!

这是使用 AsyncTask 之前的截图:

这是使用 AsyncTask 后的截图:

我的应用有什么问题?

1: 我的代码(使用 AsyncTask):

public class MainActivity extends Activity {
ArrayList<Contact> contacts;
private ContactAdapter contactAdapter;
private DbWorker db;
private ListView listView;
private Context context;

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

    listView = (ListView) findViewById(R.id.listview);

    context = getApplicationContext();
    new DbAsyncTask(context).execute();

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent intent = new Intent(MainActivity.this, ChangeContactActivity.class);
            Contact contact = contactAdapter.getContact(position);
            intent.putExtra("name", contact.getContactName());
            intent.putExtra("phone", contact.getContactPhone());
            intent.putExtra("category", contact.getContactCategory());
            intent.putExtra("org", contact.getContactOrgName());
            intent.putExtra("id", contact.getContactId());

            startActivity(intent);
        }
    });

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(MainActivity.this, AddContactActivity.class);
            startActivity(intent);
        }
    });

}

class DbAsyncTask extends AsyncTask<Void, Void, ArrayList<Contact>> {
    private Context ctx;

    public DbAsyncTask(Context ctx){
        this.ctx = ctx;
    }

    @Override
    protected ArrayList<Contact> doInBackground(Void... params) {
        db = new DbWorker(ctx);
        contacts = (ArrayList<Contact>) db.selectAllContacts();
        return contacts;
    }

    @Override
    protected void onPostExecute(ArrayList<Contact> contacts) {
        contactAdapter = new ContactAdapter(ctx, contacts);

        listView.setAdapter(contactAdapter);
    }
}

}

没有 AsyncTask 我提交:

listView = (ListView) findViewById(R.id.listview);
context = getApplicationContext();
new DbAsyncTask(context).execute();

并添加:

db = new DbWorker(this);
listView = (ListView) findViewById(R.id.listview);
contacts = (ArrayList<Contact>) db.selectAllContacts();
contactAdapter = new ContactAdapter(this, contacts);
listView.setAdapter(contactAdapter);

【问题讨论】:

    标签: android sqlite android-asynctask


    【解决方案1】:

    您正在将应用程序的上下文传递给您的异步,它不知道您的主题/样式。相反,您应该使用拥有所需主题/样式信息的活动上下文。

    因此,替换:

    context = getApplicationContext();
    

    以下内容:

    context = this;  /*here 'this' refers to your activity's context*/
    

    【讨论】:

    • 或者基本上是新的DbAsyncTask(this).execute();
    • @MuratK。是的当然。但我想回答最小的变化:)
    • @waqaslam。谢谢你
    猜你喜欢
    • 1970-01-01
    • 2018-04-14
    • 1970-01-01
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 2017-10-05
    • 2012-07-10
    • 1970-01-01
    相关资源
    最近更新 更多