2016-11-09 28 views
1

私のアプリに問題があります。それは電話帳です。 AsyncTaskを使用すると、すべての色が変わります!AsyncTaskを使用した後に変更された色

これはAsyncTaskを使用する前に、スクリーンショットです:

enter image description here

これはAsyncTaskを使用した後のスクリーンショットです:私のアプリと間違っ

enter image description here

いただきましたか?

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); 

答えて

0

あなたのテーマ/スタイルのヒントを持たないasyncにアプリケーションのコンテキストを渡しています。代わりに、必要なテーマ/スタイル情報を持つアクティビティコンテキストを使用する必要があります。したがって

、交換してください:

context = getApplicationContext(); 

と次のように:

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

それとも基本的に新しい 'DbAsyncTask(この).execute();' –

+0

@MuratK。はい、もちろん。しかし、私は最小限の変更に答えると思った: – waqaslam

+0

@ waqaslam。ありがとうございます – Krabs

関連する問題