繁体   English   中英

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

[英]how can i call custom adapter from AsyncTask

我正在尝试使用RecyclerViewListView显示ArrayList 但是当我传递ArrayListContext时,它在onPostExecute方法中给我一个错误。

我的代码如下,

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

尝试使用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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM