- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 RecyclerView
,里面有一张卡片列表,每张卡片都有一个位置可以放一张图片。当我最初向下滚动时,从屏幕外开始的卡片一旦出现在屏幕上就会加载它们的图像,但是在屏幕上开始的卡片只有在它们离开屏幕并返回屏幕后才会加载它们的图像。
它似乎也有点随机。上下文的 GIF:https://gfycat.com/gifs/detail/accurateeducatedbaiji
gif 中的最后一个示例(前 3 个餐厅图片未加载)是最常见的。
ViewHolder:
public class LocationsViewHolder extends RecyclerView.ViewHolder{
private ImageView locationImage;
private TextView locationName;
private TextView locationAddress;
public LocationsViewHolder(View itemView) {
super(itemView);
locationName = (TextView)itemView.findViewById(R.id.location_name);
locationAddress = (TextView)itemView.findViewById(R.id.location_address);
locationImage = (ImageView) itemView.findViewById(R.id.location_image);
}
public void updateUI(Place place){
locationName.setText(place.getName());
if(place.getPhotoID() != null){
// Log.v("IMAGE", "photoID for " + place.getName() + ": " + place.getPhotoID());
locationImage.setImageBitmap(place.getImage());
} else {
locationImage.setImageResource(R.drawable.no_image);
}
}
}
适配器:
public class LocationsAdapter extends RecyclerView.Adapter<LocationsViewHolder>{
ArrayList<Place> locations;
Context context;
GetNearbyPlacesData data;
public LocationsAdapter(ArrayList<Place> locations, Context context) {
this.locations = locations;
this.context = context;
data = GetNearbyPlacesData.getInstance(context);
}
@Override
public LocationsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View card = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_location, parent, false);
return new LocationsViewHolder(card);
}
@Override
public void onBindViewHolder(LocationsViewHolder holder, int position) {
Place location = locations.get(position);
holder.updateUI(location);
}
@Override
public int getItemCount() {
return locations.size();
}
}
下载地点图片:
Bitmap bitmap;
public void downloadPlaceImage(String imageKey, final Place place){
String url = buildImgURL(imageKey);
ImageRequest imageRequest = new ImageRequest(url, new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {
bitmap = response;
place.setImage(bitmap);
Log.v("IMG", "downloaded image");
}
}, 0, 0, null, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
requestQueue.add(imageRequest);
}
}
如何在餐厅和药店之间切换:onNavigationItemSelected 监听器:
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Log.v("NAV", "Navigation item selected");
URLInfo = new Bundle();
URLInfo.putString("radius", MAP_RADIUS);
URLInfo.putString("location", userMarker.getPosition().latitude + "," + userMarker.getPosition().longitude);
mMap.clear();
switch (item.getItemId()){
case R.id.nav_restaurant: {
URLInfo.putString("type", "restaurant");
placeList = data.downloadPlacesData(URLInfo);
break;
}
case R.id.nav_pharmacy: {
URLInfo.putString("type", "pharmacy");
placeList = data.downloadPlacesData(URLInfo);
break;
}
case R.id.nav_bank: {
URLInfo.putString("type", "bank");
placeList = data.downloadPlacesData(URLInfo);
break;
}
}
mDrawerLayout.closeDrawer(GravityCompat.START);
return true;
}
downloadPlacesData()
函数:
ArrayList<Place> placesList;
public ArrayList<Place> downloadPlacesData(Bundle bundle){
String url = buildPlaceURL(bundle);
placesList = new ArrayList<>();
//TODO make more requests for the next pages of results since each page is limited to 20 places
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray results = response.getJSONArray("results");
for(int i = 0; i < results.length(); i++){
JSONObject main = results.getJSONObject(i);
JSONObject geo = main.getJSONObject("geometry");
JSONObject loc = geo.getJSONObject("location");
String placeID = main.getString("place_id");
String name = main.getString("name");
String lat = loc.getString("lat");
String lng = loc.getString("lng");
String photoID = null;
try {
if (main.getJSONArray("photos") != null) {
JSONArray photos = main.getJSONArray("photos");
photoID = photos.getJSONObject(0).getString("photo_reference");
}
}catch (JSONException e){
Log.v("JSON4", e.getLocalizedMessage());
}
Place place = new Place(photoID, name, placeID, Double.parseDouble(lat), Double.parseDouble(lng), context);
Log.v("NAME", name);
placesList.add(place);
}
onPlacesLoadedListener.placesLoaded(placesList);
}catch (JSONException e){
Log.v("JSON", e.getLocalizedMessage());
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
requestQueue.add(jsonObjectRequest);
return placesList;
}
placesLoaded 回调和创建 LocationsListFragment
:
@Override
public void placesLoaded(ArrayList<Place> list) {
Log.v("PLACES", "adding places");
MarkerOptions markerOptions = new MarkerOptions();
// build a resource path using the type of place
String type = URLInfo.getString("type");
String resourcePath = "drawable/pin_" + type;
// create a resource path out of the String created
int resource = getResources().getIdentifier(resourcePath, null, this.getPackageName());
// set the marker icon according to the place type
markerOptions.icon(BitmapDescriptorFactory.fromResource(resource));
for(int i = 0; i < list.size(); i++){
// get the latitude and longitude
double lat = list.get(i).getLat();
double lng = list.get(i).getLng();
// set the marker position and title
markerOptions.position(new LatLng(lat, lng));
markerOptions.title(list.get(i).getName());
mMap.addMarker(markerOptions);
}
createLocationsListFragment();
}
private void createLocationsListFragment() {
FragmentManager fm = getSupportFragmentManager();
LocationsListFragment fragment = LocationsListFragment.newInstance();
fm.beginTransaction().add(R.id.container_locations, fragment).commit();
}
最后是实际 fragment (onCreate 和 onCreateView):
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getLocationsData = (GetLocationsData) getContext();
mParam1 = getLocationsData.getList();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_locations_list, container, false);
adapter = new LocationsAdapter(mParam1, getContext());
RecyclerView recyclerView = (RecyclerView)v.findViewById(R.id.recycler_locations);
recyclerView.setHasFixedSize(true);
recyclerView.setAdapter(adapter);
LinearLayoutManager layoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false);
recyclerView.setLayoutManager(layoutManager);
return v;
}
最佳答案
如果你有图像的 url 或位图,那么使用 glide,因为它会缓存你的图像,如果你发送 url 并加载它,则进行网络调用 for more about glide
Glide.with(mContext)
.load(imageUrl)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.centerCrop()
.into(mImageView_photo)
;
关于android - RecyclerView 中的图像不会在启动时出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45226536/
我想做的是让 JTextPane 在 JPanel 中占用尽可能多的空间。对于我使用的 UpdateInfoPanel: public class UpdateInfoPanel extends JP
我在 JPanel 中有一个 JTextArea,我想将其与 JScrollPane 一起使用。我正在使用 GridBagLayout。当我运行它时,框架似乎为 JScrollPane 腾出了空间,但
我想在 xcode 中实现以下功能。 我有一个 View Controller 。在这个 UIViewController 中,我有一个 UITabBar。它们下面是一个 UIView。将 UITab
有谁知道Firebird 2.5有没有类似于SQL中“STUFF”函数的功能? 我有一个包含父用户记录的表,另一个表包含与父相关的子用户记录。我希望能够提取用户拥有的“ROLES”的逗号分隔字符串,而
我想使用 JSON 作为 mirth channel 的输入和输出,例如详细信息保存在数据库中或创建 HL7 消息。 简而言之,输入为 JSON 解析它并输出为任何格式。 最佳答案 var objec
通常我会使用 R 并执行 merge.by,但这个文件似乎太大了,部门中的任何一台计算机都无法处理它! (任何从事遗传学工作的人的附加信息)本质上,插补似乎删除了 snp ID 的 rs 数字,我只剩
我有一个以前可能被问过的问题,但我很难找到正确的描述。我希望有人能帮助我。 在下面的代码中,我设置了varprice,我想添加javascript变量accu_id以通过rails在我的数据库中查找记
我有一个简单的 SVG 文件,在 Firefox 中可以正常查看 - 它的一些包装文本使用 foreignObject 包含一些 HTML - 文本包装在 div 中:
所以我正在为学校编写一个 Ruby 程序,如果某个值是 1 或 3,则将 bool 值更改为 true,如果是 0 或 2,则更改为 false。由于我有 Java 背景,所以我认为这段代码应该有效:
我做了什么: 我在这些账户之间创建了 VPC 对等连接 互联网网关也连接到每个 VPC 还配置了路由表(以允许来自双方的流量) 情况1: 当这两个 VPC 在同一个账户中时,我成功测试了从另一个 La
我有一个名为 contacts 的表: user_id contact_id 10294 10295 10294 10293 10293 10294 102
我正在使用 Magento 中的新模板。为避免重复代码,我想为每个产品预览使用相同的子模板。 特别是我做了这样一个展示: $products = Mage::getModel('catalog/pro
“for”是否总是检查协议(protocol)中定义的每个函数中第一个参数的类型? 编辑(改写): 当协议(protocol)方法只有一个参数时,根据该单个参数的类型(直接或任意)找到实现。当协议(p
我想从我的 PHP 代码中调用 JavaScript 函数。我通过使用以下方法实现了这一点: echo ' drawChart($id); '; 这工作正常,但我想从我的 PHP 代码中获取数据,我使
这个问题已经有答案了: Event binding on dynamically created elements? (23 个回答) 已关闭 5 年前。 我有一个动态表单,我想在其中附加一些其他 h
我正在尝试找到一种解决方案,以在 componentDidMount 中的映射项上使用 setState。 我正在使用 GraphQL连同 Gatsby返回许多 data 项目,但要求在特定的 pat
我在 ScrollView 中有一个 View 。只要用户按住该 View ,我想每 80 毫秒调用一次方法。这是我已经实现的: final Runnable vibrate = new Runnab
我用 jni 开发了一个 android 应用程序。我在 GetStringUTFChars 的 dvmDecodeIndirectRef 中得到了一个 dvmabort。我只中止了一次。 为什么会这
当我到达我的 Activity 时,我调用 FragmentPagerAdapter 来处理我的不同选项卡。在我的一个选项卡中,我想显示一个 RecyclerView,但他从未出现过,有了断点,我看到
当我按下 Activity 中的按钮时,会弹出一个 DialogFragment。在对话框 fragment 中,有一个看起来像普通 ListView 的 RecyclerView。 我想要的行为是当
我是一名优秀的程序员,十分优秀!