有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我想将gridview更改为recyclerview

我是安卓的新手。 我一边学习一边看开源,但我对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;
        }
    }
}

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


共 (1) 个答案

  1. # 1 楼答案

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

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