我想将 gridview 更改为 recyclerview

I want to change gridview to recyclerview

我是 android 的新手。 一边看开源一边学习,但对RecyclerView还是没有很好的理解。 我试过了,结果一整天都找不到想要的结果。 我想将 GridView 更改为 RecyclerView,但我需要帮助。

public class MainActivity extends AppCompatActivity {

    GridView gridView;


    List<Bitmap> list_image = new ArrayList<Bitmap>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        String url = "https://www.pinterest.co.kr/offsong/wallpaper_black/";
        try {
            getListImageFromWeb(url);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    protected void getListImageFromWeb(String url) throws InterruptedException {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                try  {
                    Document document = (Document) Jsoup.connect(url).get();
                    Elements images = document.select("img");
                    System.out.println("image size:" + images.size());
                    for (Element image : images){
                        Bitmap bmget = getBitmapFromSrc(image.attr("src"));
                        if (bmget != null){
                            list_image.add(bmget);
                        }
                    }
                    System.out.println("gengerate list image complete");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
        thread.start();
        thread.join();
        ShowImage();
    }
    protected Bitmap getBitmapFromSrc(String src){
        try {
            URL url = new URL(src);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoInput(true);
            connection.connect();
            InputStream inputStream = connection.getInputStream();
            Bitmap mybitmap = BitmapFactory.decodeStream(inputStream);
            return mybitmap;

        } catch (MalformedURLException e) {
            e.printStackTrace();
            return null;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
    // this function show some images in to screen
    protected void ShowImage(){

        gridView = findViewById(R.id.gridView);

        CustomAdapter customAdapter = new CustomAdapter();
        gridView.setAdapter(customAdapter);

        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Intent intent = new Intent(getApplicationContext(), ImageDetail.class);
                intent.putExtra("image", list_image.get(i));
                startActivity(intent);
            }
        });
    }

    private class CustomAdapter extends BaseAdapter {

        @Override
        public int getCount() {
            return  list_image.size();
        }

        @Override
        public Object getItem(int i) {
            return null;
        }

        @Override
        public long getItemId(int i) {
            return 0;
        }

        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            View view1 = getLayoutInflater().inflate(R.layout.image_view, null);
            ImageView image = view1.findViewById(R.id.image_view);
            image.setImageBitmap(list_image.get(i));
            return view1;
        }
    }
}

提前致谢! 你会对我有很大的帮助。

这是一个非常基本的示例,您可以试试:

public class ForeCastAdapter extends RecyclerView.Adapter<ForeCastAdapter.ForecastItemHolder> {

    private String[] mWeatherData;
    @NonNull
    @org.jetbrains.annotations.NotNull
    @Override
    public ForecastItemHolder onCreateViewHolder(@NonNull @org.jetbrains.annotations.NotNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.weather_list_item,parent,false);
        return new ForecastItemHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull @org.jetbrains.annotations.NotNull ForeCastAdapter.ForecastItemHolder holder, int position) {

        String weatherForDay = mWeatherData[position];
        holder.dataTextView.setText(weatherForDay);
    }

    @Override
    public int getItemCount() {
        if (mWeatherData!=null){
            return mWeatherData.length;
        }
        return 0;
    }

    public void setWeatherData(String[] mWeatherData) {
        this.mWeatherData = mWeatherData;
        notifyDataSetChanged();
    }

    class ForecastItemHolder extends RecyclerView.ViewHolder{

        TextView dataTextView;
        public ForecastItemHolder(@NonNull @org.jetbrains.annotations.NotNull View itemView) {
            super(itemView);
            dataTextView = itemView.findViewById(R.id.tv_weather_data);
        }
    }
}


public class MainActivity extends AppCompatActivity {

    private ForeCastAdapter mForeCastAdapter;
  
    RecyclerView recyclerView;

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

         recyclerView = findViewById(R.id.forecast_recyclerview);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.setHasFixedSize(true);
        mForeCastAdapter = new ForeCastAdapter();

        recyclerView.setAdapter(mForeCastAdapter);

         mForeCastAdapter.setWeatherData(dummyWeatherData);
        
    }
        String[] dummyWeatherData = {
                "Today, May 17 - Clear - 17°C / 15°C",
                "Tomorrow - Cloudy - 19°C / 15°C",
                "Thursday - Rainy- 30°C / 11°C",
                "Friday - Thunderstorms - 21°C / 9°C",
                "Saturday - Thunderstorms - 16°C / 7°C",
                "Sunday - Rainy - 16°C / 8°C",
                "Monday - Partly Cloudy - 15°C / 10°C",
                "Tue, May 24 - Meatballs - 16°C / 18°C",
                "Wed, May 25 - Cloudy - 19°C / 15°C",
                "Thu, May 26 - Stormy - 30°C / 11°C",
                "Fri, May 27 - Hurricane - 21°C / 9°C",
                "Sat, May 28 - Meteors - 16°C / 7°C",
                "Sun, May 29 - Apocalypse - 16°C / 8°C",
                "Mon, May 30 - Post Apocalypse - 15°C / 10°C",
        };

}