【问题标题】:I want to change gridview to recyclerview我想将gridview更改为recyclerview
【发布时间】:2021-06-08 09:08:55
【问题描述】:

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

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

【问题讨论】:

  • 这里有一个tutorial 可以帮助你。它易于理解和解释清楚,如果您仍有不明白的地方,请告诉我们。
  • “我找不到想要的结果”是什么意思?你有什么错误信息?实际结果和预期结果有什么区别?

标签: java android android-recyclerview gridview


【解决方案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",
        };

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 2017-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    相关资源
    最近更新 更多