我想将 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",
};
}
我是 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",
};
}