我如何从AsyncTask调用自定义适配器

时间:2016-10-16 15:47:16

标签: android android-recyclerview

我正在尝试使用ArrayListListView中显示RecyclerView。但是当我通过onPostExecuteArrayList时,它会在Context方法中给出错误。

我的代码如下,

class LoadAlltimeTable extends AsyncTask<String, String, String> {

    @Override
    protected String doInBackground(String... params) {
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        JSONHttpClient jsonHttpClient = new JSONHttpClient();
        UserModel[] user = jsonHttpClient.Get(ServiceUrl.TiMETABLE, nameValuePairs, UserModel[].class);

        if (user.length > 0) {
            arrayList= new ArrayList<UserModel>();
            for (UserModel product : user) {
                final TestModel obj= new TestModel();
                obj.setName(product.getName());
                newList.add(obj);
                runOnUiThread(new Runnable(){

                    @Override
                    public void run(){
                        //update ui here
                        // display toast here
                        Toast.makeText(TimeTable.this, "Not Null "+ newList.size()+""+obj.getName(), Toast.LENGTH_SHORT).show();
                    }
                });
            }
        }

        return null;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        progressDialog = new ProgressDialog(TimeTable.this);
        progressDialog.setMessage("Loading----");
        progressDialog.show();
    }

    @Override
    protected void onPostExecute(String s) {
        progressDialog.dismiss();

        //here i am getting error
        adapter=new TimeTableAdapter(newList,getApplicationContext());
        rv.setAdapter(adapter);
    }
}

这是我的适配器代码,

public class TimeTableAdapter extends RecyclerView.Adapter<TimeTableAdapter.ContactViewHolder> {
    ArrayList<TestModel> list;
    Activity activity;

    public TimeTableAdapter(ArrayList<TestModel> list, Activity activity) {
        this.list = list;
        this.activity = activity;
    }
}

1 个答案:

答案 0 :(得分:-1)

尝试使用getActivity()代替getApplicationContext()。您的代码应如下所示:

adapter = new TimeTableAdapter(newList, getActivity());

说明:

您可能会收到错误,因为您的构造函数如下:

public TimeTableAdapter(ArrayList<TestModel> list, Activity activity) {
    this.list = list;
    this.activity = activity;
}

它需要您的ArrayList对象以及活动。但是,在您的片段中,您可以使用:

adapter = new TimeTableAdapter(newList, getApplicationContext());

你给它的不是一个活动,而是你的片段类。这给出了一个错误(我忘了哪一个),因为你给它一个片段类而不是一个活动类。因此,您需要使用getActivity()代替getApplicationContext()