所以,我有一个AsyncTask,它加载一个sql查询,结果将显示在表格布局中。 " extractArrayList"方法将查询结果提取到数组列表中 " populateItemsTable"方法填充表以显示结果。
public boolean extractArrayList(ArrayList<JSONObject> result_obj) {
try {
for (int i = 0; i < result_obj.size(); i++) {
item_createDate.add(result_obj.get(i).getString("CreateDate"));
item_name.add(result_obj.get(i).getString("Name"));
item_unit.add(result_obj.get(i).getString("Unit"));
item_textLable.add(result_obj.get(i).getString("TextLable"));
item_topSale.add(result_obj.get(i).getString("TopSale"));
item_Fee.add(result_obj.get(i).getString("Fee"));
item_moreInfo.add(result_obj.get(i).getString("MoreInfo"));
item_IfImageUploaded.add(result_obj.get(i).getString("IfImageUploaded"));
}
Collections.reverse(item_createDate);
Collections.reverse(item_name);
Collections.reverse(item_textLable);
Collections.reverse(item_unit);
Collections.reverse(item_Fee);
Collections.reverse(item_IfImageUploaded);
Collections.reverse(item_moreInfo);
Collections.reverse(item_topSale);
return true;
} catch (JSONException e) {
e.printStackTrace();
return false;
}
}
public boolean populateItemsTable(){
TableLayout items_table = (TableLayout) findViewById(R.id.items_table);
for (int i = 0; i < item_createDate.size(); i++) {
LayoutInflater layoutInflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View tr = layoutInflater.inflate(R.layout.row_layout, null, false);
tr.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
}
});
tr.setOnGenericMotionListener(new View.OnGenericMotionListener() {
@Override
public boolean onGenericMotion(View v, MotionEvent event) {
return false;
}
});
tr.setOnHoverListener(new View.OnHoverListener() {
@Override
public boolean onHover(View v, MotionEvent event) {
return false;
}
});
tr.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
}
});
TextView item_nameTxt = (TextView) tr.findViewById(R.id.item_nameTxt);
TextView item_feeTxt = (TextView) tr.findViewById(R.id.item_feeTxt);
TextView item_textTxt = (TextView) tr.findViewById(R.id.item_textTxt);
ImageView item_imgView = (ImageView) tr.findViewById(R.id.item_imgView);
final Button add_basket_btn = (Button) tr.findViewById(R.id.basket_btn);
final Button more_info_btn = (Button) tr.findViewById(R.id.moreInfo_btn);
item_nameTxt.setText(item_name.get(i).toString());
Float item_fee_float = Float.parseFloat(item_Fee.get(i));
NumberFormat nf = NumberFormat.getNumberInstance(Locale.US);
DecimalFormat df = (DecimalFormat) nf;
item_feeTxt.setText("قیمت: " + df.format(item_fee_float) + " ریال / " + item_unit.get(i).toString());
item_textTxt.setText(item_textLable.get(i).toString());
if (item_IfImageUploaded.get(i).equals("Yes")) {
String pic_url = item_createDate.get(i).toLowerCase().replaceAll("[-]", "");
pic_url = item_createDate.get(i).toLowerCase().replaceAll("[:]", "");
pic_url = pic_url.toLowerCase().replaceAll("[ ]", "");
pic_url = pic_url.toLowerCase().replaceAll("[-]", "");
pic_url = "http://www.coffeetaxi.ir/iteminfo/photo/" + pic_url + ".jpg";
Glide.with(this)
.load(pic_url.toString())
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
spinner.setVisibility(View.GONE);
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
spinner.setVisibility(View.GONE);
return false;
}
})
.into(item_imgView);
} else {
item_imgView.setImageResource(R.mipmap.no_image);
}
add_basket_btn.setTag(i);
add_basket_btn.setBackgroundResource(R.mipmap.basket_btn);
add_basket_btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Integer code;
code = Integer.parseInt(add_basket_btn.getTag().toString());
askForQTY(itemsActivity.this, code, item_name.get(code), "مقدار/تعداد مورد نظر را وارد نمایید", false);
}
});
more_info_btn.setTag(i);
more_info_btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
moreInfoCall = Integer.parseInt(more_info_btn.getTag().toString());
itemsActivity.this.startActivity(new Intent(itemsActivity.this, MoreinfoActivity.class));
}
});
if (item_moreInfo.get(i).equals("none")) {
more_info_btn.setVisibility(View.INVISIBLE);
} else {
}
items_table.addView(tr);
}
return true;
}
AsyncTask的onPostExecute方法分别调用上面两个方法。 这段代码很好但只有一个: 结果的所有图像将立即下载,并导致高内存分配。 我想要的是对上面的代码进行更改(可以进行大量的更改;))以便在滚动到特定项目时使Glide加载图像。(有些东西就像Instagram应用程序那样!) 这是主要活动XML:
<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingTop="0dp"
android:fillViewport="true"
android:scrollbars="vertical" >
<TableLayout
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:id="@+id/items_table"
android:scrollIndicators="left"
android:fillViewport="true"
android:showDividers="middle"></TableLayout>
</ScrollView>
以及表格行布局:
<RelativeLayout
android:id="@+id/img_rel"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:gravity="left"
android:layout_weight="1">
<ImageView
android:adjustViewBounds="true"
android:maxHeight="160dp"
android:maxWidth="160dp"
android:id="@+id/item_imgView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:scaleType="fitStart"/>
</RelativeLayout>
<RelativeLayout
android:layout_marginTop="10dp"
android:id="@+id/desc_rel"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:layout_marginRight="0dp"
android:gravity="right"
android:layout_weight="1">
<TextView
android:layout_marginTop="10dp"
android:id="@+id/item_nameTxt"
android:inputType="textMultiLine"
android:scrollHorizontally="false"
android:textSize="16dp"
android:layout_alignRight="@+id/basket_btn"
android:textAlignment="gravity"
android:layout_gravity="right"
android:gravity="right"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:inputType="textMultiLine"
android:scrollHorizontally="false"
android:id="@+id/item_feeTxt"
android:layout_alignRight="@+id/basket_btn"
android:textAlignment="gravity"
android:layout_gravity="right"
android:gravity="right"
android:layout_width="wrap_content"
android:layout_below="@+id/item_nameTxt"
android:layout_height="wrap_content" />
<TextView
android:inputType="textMultiLine"
android:scrollHorizontally="false"
android:id="@+id/item_textTxt"
android:layout_alignRight="@+id/basket_btn"
android:textAlignment="gravity"
android:layout_gravity="right"
android:gravity="right"
android:layout_below="@+id/item_feeTxt"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/basket_btn"
android:layout_marginRight="5dp"
android:layout_alignParentRight="true"
android:background="@mipmap/basket_btn"
android:layout_width="40dp"
android:layout_below="@+id/item_textTxt"
android:layout_height="40dp" />
<Button
android:id="@+id/moreInfo_btn"
android:layout_marginRight="5dp"
android:background="@mipmap/more_info"
android:layout_below="@+id/item_textTxt"
android:layout_toLeftOf="@+id/basket_btn"
android:layout_width="40dp"
android:layout_height="40dp" />
</RelativeLayout>
任何提示都将受到赞赏。
答案 0 :(得分:0)
当布局膨胀时,您请求Glide立即下载图像,并且它不正常。
在我看来,你应该使用ListView或RecycleView,而不是TableLayout。 Glide应仅在绑定视图持有者时下载图像。