آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

لود کردن آیتم ها با اسکرول - Lazzy Loading - حل شد

Pr0gramm3r  12 سال پیش  11 سال پیش
+4 0

 سلام

من آموزش های استاد رو درباره مارکت دیدم

و الان هیچ مشکلی ندارم جز یکی

بر فرض 1000 هزار آیتم دارم

خوب مطمئنا برنامه نمیتونه در جا همه رو لود کنی و خیلی طول میکشه

میخواستم ببینم چطوری میشه هر دفعه 10 تا آیتم لود کنه و وقتی کاربر اسکرول کرد به سمت پایین همینطوری 10 آیتم اضافه بشه

ممنون میشم راهنمایی کنید

0 0
باز کسی کمک نمیکنه ... (12 سال پیش)
0 0
باز کسی سرچ نمیکنه. هنوز 3 هفته نیست alu این سوالو پرسیده و جواب داده . سوال 1602 (12 سال پیش)
0 0
باز دم صادق گرم که تکراری هم جواب میده :)) (12 سال پیش)
0 0
قربونت . ظاهرا باید یه تذکر جمعی بدیم. اینجور نمیشه ! ;) (12 سال پیش)
+1 0
باز من ضایع شدم :| , ولی باز نفهمیدم چظوری باید مشکلمو حل کنم , یعنی چظوری به لیست ویو بگم چقدر اول لود کنه , بعد که اومد پایین چقدر دیگه (12 سال پیش)
 برای این سوال 7 پاسخ وجود دارد.
پاسخ به سوال 
Pr0gramm3r  12 سال پیش
0 0

سلام

من مشکلم حل نشد

یعنی تونستم اون تیکه رو درست کنم

ولی هر درخواستی برای مرتب سازی یا فیلتر کردن میفرستادم برنامه کرش میکرد

کلا از روشی خوبی نرفتم

تایپک اقای ALU هم رفتم ولی هیچی نتونستم بفهمم

تقریبا مشکل اون یکم با من فرق داره

من اون کد رو دارم که اگه به اخرین ایتم رسید مثلا یه کاری بکنه

ولی مشکل من اینه : 

مثلا اول 10 آیتم لود کنه بعد که به اخرین ایتم رسید 10 آیتم دیگه

خواهش میکنم کمک کنید

جون هر کسی دوست دارید

0 0
کمک ... (12 سال پیش)
0 0
کدتون رو بزارید (12 سال پیش)
0 0
بچه ها این موضوع خیلی قاطی شده من متوجه نشدم چجوری شد.میشه توضیحه شسته رفته ای بدید یا یه نمونه کد بذارید ممنون میشم (11 سال پیش)
پاسخ به سوال 
Pr0gramm3r  12 سال پیش
0 0

کد BookList همون ApplicationList تو آموزش

 package pr0gram3r72.BookOnline;

import java.util.ArrayList;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;


public class BookList extends EnhancedActivity {

private ListView list;
private AdapterApplication adapter;
private ArrayList<StructApplication> applications = new ArrayList<StructApplication>();
private Button btnSortPrice;
private Button btnSortRate;
private Button btnSortInstalls;
private Button btnAll;
private Button btnFree;
private EditText ed1;
private TextView txtN;
private Button btnSearch;
private Button btnPaid;
private String lastSort = "book_ratingValue DESC";
private String lastFilter = "1=1";
public static JSONArray y;


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.book_list);
list = (ListView) findViewById(R.id.list);
btnSortPrice = (Button) findViewById(R.id.btnSortPrice);
btnSortRate = (Button) findViewById(R.id.btnSortRate);
btnSortInstalls = (Button) findViewById(R.id.btnSortInstalls);
btnAll = (Button) findViewById(R.id.btnAll);
btnFree = (Button) findViewById(R.id.btnFree);
btnSearch = (Button) findViewById(R.id.button1);
ed1 = (EditText) findViewById(R.id.editText1);
btnPaid = (Button) findViewById(R.id.btnPaid);
txtN = (TextView) findViewById(R.id.txtN);

btnSearch.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
lastFilter = "book_name=" + ed1.getText();
populateFromServer();
}
});

btnSortPrice.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
lastSort = "book_price DESC";
populateFromServer();
}
});

btnSortRate.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
lastSort = "book_ratingValue DESC";
populateFromServer();
}
});

btnSortInstalls.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
lastSort = "book_install DESC";
populateFromServer();
}
});

btnAll.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
lastFilter = "1=1";
populateFromServer();
}
});

btnFree.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
lastFilter = "book_price=0";
populateFromServer();
}
});

btnPaid.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
lastFilter = "book_price>0";
populateFromServer();
}
});
adapter = new AdapterApplication(applications);
list.setAdapter(adapter);
list.setOnScrollListener(new OnScrollListener() {

private int currentVisibleItemCount;
private int currentFirstVisibleItem;
private int currentScrollState;


@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
this.currentFirstVisibleItem = firstVisibleItem;
this.currentVisibleItemCount = visibleItemCount;
}


public void onScrollStateChanged(AbsListView view, int scrollState) {
this.currentScrollState = scrollState;
this.isScrollCompleted();
}


private void isScrollCompleted() {
if (this.currentVisibleItemCount > 0 && this.currentScrollState == SCROLL_STATE_IDLE) {
boolean isLoading = false;
if ( !isLoading) {
isLoading = true;
loadMoreData();
}
}

}


private void loadMoreData() {
// TODO Auto-generated method stub
// populateFromServer();
}
});
populateFromServer();
}


private void populateFromServer() {
String url = "http://192.168.1.101/bookm/service.php";
ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("action", "read"));
params.add(new BasicNameValuePair("filter", lastFilter));
params.add(new BasicNameValuePair("sort", lastSort));

String result = Webservice.readUrl(url, params);
if (result.contains("[]")) {
list.setVisibility(View.GONE);
txtN.setVisibility(View.VISIBLE);
} else {
list.setVisibility(View.VISIBLE);
txtN.setVisibility(View.GONE);
}
if (result != null) {
try {
applications.clear();
JSONArray books = new JSONArray(result);
y = books;
for (int i = 0; i < books.length(); i++) {
JSONObject object = books.getJSONObject(i);
StructApplication application = new StructApplication();
application.file = object.getString("book_file");
application.name = object.getString("book_name");
application.price = object.getInt("book_price");
application.ratingValue = (float) object.getDouble("book_ratingValue");
application.logoUrl = object.getString("book_logoUrl");
application.author = object.getString("book_author");
application.description = object.getString("book_description");
application.filesize = object.getInt("book_size");
application.installs = object.getInt("book_install");
application.votes = object.getInt("book_votes");

applications.add(application);
}

adapter.notifyDataSetChanged();
}
catch (JSONException e) {}
}
}
}
پاسخ به سوال 
EloMan  12 سال پیش
+3 0

منم همین مشکل رو داشتم. و به شیوه صفحه بندی در php  حلش کردم. البته جایی نخوندم و به فکر خودم رسید اگه دوستان هم تایید می کنند از این روش استفاده کن. 

در سمت php  کد زیر  رو برای گرفتن کوئری  و نمایش ایتم ها در لیست داریم.که 5 تعدادآیتم مورد نیاز و 35 شماره شروع رکورد هست که باید بطور مداوم تغییر کنه. شما خیلی راحت این مقدار رو از طریق متد get یا post به سرور ارسال کنید و جای 35 قرار بدید. و هر بار که به انتهای لیست میرسید این مقدار رو با تعداد مد نظر جمع کنید ( num+=14)  پس هر بار این مقدار جدید به سرور ارسال میشه و اطلاعات جدید دریافت میشه. فقط ترد و هندلر فراموش نشه.

  mysql_query("SELECT * FROM table ORDER BY age ASC LIMIT 35,5");
0 0
میشه بیشتر توضیح بدید , کد رو دقیقا کجا بزارم؟ این کد اونجا دارم $result = mysqli_query($connection, "SELECT * FROM books WHERE " . $_REQUEST['filter'] . " ORDER BY " . $_REQUEST['sort']); باید بعد این یا به جای این بزارم؟ (12 سال پیش)
پاسخ به سوال 
Pr0gramm3r  12 سال پیش
0 0

چون کد تو نظر درست نیومد اینجا میزارم

 $result = mysqli_query($connection, "SELECT * FROM books WHERE " . $_REQUEST['filter'] . " ORDER BY " . $_REQUEST['sort']);

 

پاسخ به سوال 
مجتبی یگانه  12 سال پیش
+9 0

با توجه به قولی که به دوستان دادم و گفتم پاسخ میدم ، دیدم هیچ چیز بهتر از یه نمونه پروژه نیست ، میتونید دانلود کنید !

لینک دانلود مستقیم

0 0
اقا خیلی ممنون بابت پروژه ولی این به صورت افلاینه , اینو کامل بلدم , مشکلم تو آنلاینه .. نمیتونم بر فرض 100 تا table درست کنم مثلا اول table 1 رو لود کنه و بعد که به آخر رسید table 2 و ... من میخوام مثلا 10 آیتم اول table رو لود کنه و وقتی به آخر رسید 10 آیتم بعدیش رو .. (12 سال پیش)
0 0
با این تفاسیر ، پاسخ دوستان کاملا درسته ، اما من هم  پاسخ میدم (12 سال پیش)
0 0
تشکر از راهنمایی (12 سال پیش)
0 0
موفق باشید (12 سال پیش)
پاسخ به سوال 
EloMan  12 سال پیش
+3 0

شما باید یه متغیر دیگه هم برای نقطه شروع داشته باشید. همین کدی که گذاشتید باید ویرایش بشه که شکل صحیحش این میشه ، num همون متغیریه که باید در هر بار فراخوانی مقدارش افزایش پیدا کنه

  $result = mysqli_query($connection, "SELECT * FROM books WHERE " . $_REQUEST['filter'] .
" ORDER BY " . $_REQUEST['sort']." LIMIT ".$_REQUEST['num'].",15");
0 0
خیلی ممنون داداش , سعی میکنم با این مشکلمو حل کنم (12 سال پیش)
0 0
من هنوز دقیقا این num رو نفهمیدم , ولی این 15 تعداد آیتمیه که باید نشون بده درسته؟ پس num چیه (12 سال پیش)
0 0
این num همون شماره ایه که بعد از اون اطلاعات به میزان 15 رکورد لود میشه.اولش صفره و 15 آیتم اول توسط json خونده میشه . وقتی که به آخر لیست رسیدی که تو کد دوستان توضیح دادن چجوری میشه فهمید به انتهای لیست (که همون 15 آیتمه) رسیدیم num+=15 میشه و به سرور ارسال میشه. دستور دوباره فراخوانی میشه اما اینبار از 15 تا 30 و به همین ترتیب.مفهمومه؟ فقط یادت باشه این دستورات توی ترد باشه و آخر سر هم بعد از اتمام کار ترد (باید مطمئن بشی کار ترد تموم شده و اطلاعات لود شده.) notifydatasetchange رو توی یه هندلر فراخوانی کنی. (12 سال پیش)
0 0
آقای EloMan میشه کامل بنویسی کد مربوطه رو ؟؟؟؟؟؟ (11 سال پیش)
پاسخ به سوال 
مجتبی یگانه  12 سال پیش
+6 0

1 - شما در هر درخواست تعداد خاصی خروجی دارید ، این میشه Limit
2 - شما در هر بار درخواست ، ممکنه قبلا یه تعدادی را دریافت کرده باشید ، ممکنه نکرده باشید ! ، پس به offset هم نیاز دارید !

شما علاوه بر سایر پارامتر هایی که نیاز دارید ، باید offset را از برنامه به سرور بفرستید کد php به این شکل میشه

$offset = $_Post['offset'];
$limit = 10;
$command = "SELECT * FROM `table` LIMIT $offset,$limit";

پس در واقع شما میگید  از N تا M یا در اینجا از offset تا offset +10 رو به من برگردون !

موفق باشید

0 0
اخه برادر من , الان انتظار داری با این عقلم اینو درک کنم؟ :D (12 سال پیش)
0 0
یه بار دیگه خوندم عقلم کشید , خیلی ممنون , نیازی به توضیح نیست (12 سال پیش)
0 0
اگه توضیح میخواستی ، منم آدرس میخواستم ، بعد بحث جذاب ترمیشد ، یه چیزی تو مایه های کشتی کج D: (12 سال پیش)
0 0
مرسی از توضیح خوبت. شما منظوزتون اینه که هربار لیست به انتها رسید از سمت اندروید تعداد آیتم های لود شده رو به سرور بفرستیم و این تعداد در متغیره offset ذخیره بشه؟ حالا سوالم اینه که چجوری متوجه شیم که لیست به انتها رسیده؟ (12 سال پیش)
0 0
تازه رسیدید به جایی که برای من خیلی درد سر داشت ! ، اما الان حل شد ، یه شرط سه مقداری هست ، سوالات من رو برسی کنید میبینیدش ! (12 سال پیش)
0 0
منظورت این سواله ؟http://answers.uncocoder.com/question/1602/بازگذاری-داینامیک-آیتم-ها-در-لیست-ویو-nbsp-حل-شد- این پروژه ای که تو همین تاپبک گذاشتید چی؟ دقیقا متوجه نمی شم تو تاپیکی که لینکش رو دادم یه روش گفتید تو پروژه ای هم که گذاشتید از یه روش دیگه استفاده کردید. (12 سال پیش)
0 0
عملکرد هر دو یکی هست ، یعنی برسی میشه آیا ایتمی که در حال fill شدن هست آیتم آخره یا نه ! - لطفا سوالاتتون رو در همون تاپیک بپرسید (12 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .