您好,我想让用户asynctask在onPreExecute中使用扩展RecyclerView的类,我应该使用viewDialog = new ViewDialog();的活动,但我不知道应该如何使用我的代码:
public class MainCatRecycleAdapter extends RecyclerView.Adapter<viewholder> {
 ArrayList<MainCatRecycleInfo> mainCatRecycleInfos = new ArrayList<>();
 public MainCatRecycleAdapter(ArrayList<MainCatRecycleInfo> mainCatRecycleInfos) {
    this.mainCatRecycleInfos = mainCatRecycleInfos;
 }
 @Override
 public viewholder onCreateViewHolder(ViewGroup parent, int i) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.main_cat_recycle_product, parent, false);
    return new viewholder(view);
 }
 @Override
 public void onBindViewHolder(@NonNull viewholder holder, int position) {
    MainCatRecycleInfo mainCatRecycleInfo = mainCatRecycleInfos.get(position);
    holder.txtname.setText(mainCatRecycleInfo.name);
    Picasso.with(G.Context).load(Paramater.pic + "maincatimage/" + mainCatRecycleInfo.image).into(holder.img);
    Log.i("dsfsd", Paramater.pic + "maincatimage/" + mainCatRecycleInfo.image);
    holder.id = mainCatRecycleInfo.id;
 }
 @Override
 public int getItemCount() {
    return mainCatRecycleInfos.size();
 }
}
class viewholder extends RecyclerView.ViewHolder {
ViewDialog viewDialog;
public ImageView img;
public TextView txtname;
public String id = "";
public LinearLayout linearLayout;
Runnable r;
public viewholder(View itemView) {
    super(itemView);
    img = (ImageView) itemView.findViewById(R.id.mainimgrecycle);
    txtname = (TextView) itemView.findViewById(R.id.maintextrcycle);
    linearLayout = (LinearLayout) itemView.findViewById(R.id.linearrecycle);
    linearLayout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            new AsyncTaskShowSubCats(Paramater.ip + "showSubCat.php",id).execute();
        }
    });
}
public class AsyncTaskShowSubCats extends AsyncTask {
    public String link = "";
    public String id="";
    public AsyncTaskShowSubCats(String link, String id) {
        this.link = link;
        this.id = id;
    }
    @Override
    protected Object doInBackground(Object[] objects) {
        try {
            String data = URLEncoder.encode("id", "utf-8") + "=" + URLEncoder.encode(id, "utf-8");
            URL url = new URL(link);
            URLConnection connection = url.openConnection();
            connection.setDoOutput(true);
            OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream());
            writer.write(data);
            writer.flush();
            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            StringBuilder builder = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                builder.append(line);
            }
            ActivitySubCat.subcat = builder.toString();
            ActivitySerch.serch = builder.toString();
            Log.i("fdffs",builder.toString());
        } catch (Exception e) {
        }
        return "";
    }     
    @Override
    protected void onPreExecute() {
        viewDialog = new ViewDialog();
        viewDialog.showDialog();
        super.onPreExecute();
    }
    @Override
    protected void onPostExecute(Object o) {
            viewDialog.hideDialog();
            super.onPostExecute(o);
    }
  }
}发布于 2019-12-22 16:35:03
要获取活动的上下文,可以通过适配器的构造函数传递上下文。如下所示:
public class MainCatRecycleAdapter extends RecyclerView.Adapter<viewholder> {
 ArrayList<MainCatRecycleInfo> mainCatRecycleInfos = new ArrayList<>();
 private Context context;
 public MainCatRecycleAdapter(ArrayList<MainCatRecycleInfo> mainCatRecycleInfos, Context context) {
    this.mainCatRecycleInfos = mainCatRecycleInfos;
    this.context = context;
 }
}https://stackoverflow.com/questions/59441919
复制相似问题