کلیدستان

نسخه‌ی کامل: ذخیره آخرین صفحه خوانده شده یک کتاب (در برنامه نویسی اندروید)
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
با سلام خدمت اساتید و همه ی کاربران

من یک کتاب اندروییدی ساختم که این دوتا مشکل را دارم لطفا کمکم کنید
1_وقتی مثلا یک متن طولانی در کتاب را می خوانم و دکمه خروج را می زنم هنگام اجرای دوباره کتاب متن داستان از اول شروع میشه چگونه میشه هنگامی که کاربر برنامه را اجرا کرد و یک متن یا داستانی که قبلا خوانده به همان صفحه برود و متن از سر گرفته نشود در واقع آخرین صفحه خوانده شده ذخیره شود.
2_چگونه می توانم موضوعات را دسته بندی کنم مثلا  داستان ها , اس ام اس و...لطفا راهنمایی فرمایید مبتدی هستم.
سلام.

(۱۳۹۴/۰۳/۰۳, ۱۲:۲۷ ق.ظ)'مهران' نوشته: [ -> ]1_وقتی مثلا یک متن طولانی در کتاب را می خوانم و دکمه خروج را می زنم هنگام اجرای دوباره کتاب متن داستان از اول شروع میشه چگونه میشه هنگامی که کاربر برنامه را اجرا کرد و یک متن یا داستانی که قبلا خوانده به همان صفحه برود و متن از سر گرفته نشود در واقع آخرین صفحه خوانده شده ذخیره شود.
 

نمیشه نظر کلی داد و باید بفرمایید که ساختار نمایش اطلاعات برنامه اندروید شما به چه صورت می باشد.

(۱۳۹۴/۰۳/۰۳, ۱۲:۲۷ ق.ظ)'مهران' نوشته: [ -> ]2_چگونه می توانم موضوعات را دسته بندی کنم مثلا  داستان ها , اس ام اس و...لطفا راهنمایی فرمایید مبتدی هستم.
 

دو Activity خواهیم داشت که هر کدام، دارای ListView است. در Activity اول، با ListView ، فهرست موضوعات را نمایش می دهیم. با اشاره کاربر روی یک item از ListView ، به Activity دوم می رود و شماره متناظر با موضوع را به ان ارسال می کنیم. در Activity دوم، بر اساس شماره دریافتی، فهرست مبحث ها را فراخوانی کرده و در ListView نمایش می دهیم.

برای ساخت ListView سفارشی، کلید زیر را بخوانید :

کلید شماره 843

برای ارسال مقدار بین Activity ها، کلید زیر را بخوانید :

کلید شماره 236

سلام  مجدد
با تشکر از جواب شما
و اما (سوال شماره یک ):
ساختار نمایش اطلاعات برنامه به این صورت است که یک listView  دارم که با کلیک بر روی آن اطلاعات را از دیتابیس می خواند و در یک صفحه دیگر نمایش میدهد بفرمایید چطور می توانم موقعیت صفحه را ذخیره کنم که هنگام خروج و اجرای دوباره برنامه مو قعیت متن خوانده شده حفظ شود و به اول صفحه بر نگردد.
لازم به ذکر است که از اسکرول برای نمایش متن استفاده می کنم.
 
یعنی انقد این کار سخته؟

لطفا یکی جواب بده...
دوست عزیز به نظرمن یکی از راه حلهایی که میتونه به شما کمک کنه.
اینه  که ابتدا یک شی Scroll توی فایل جاوا بسازید و متن طولانیتون رو بهش پاس بدید.
کد پی‌اچ‌پی:
ScrollView scrollView;
float scrollSpot;
protected 
void onCreate(Bundle savedInstanceState) {

    
textView.setText("my text is long...");
    
scrollView = new ScrollView(this);
    
scrollView.addView(textView);



حالا میتونید از دو متد SetScrollSpot (برای ست کردن پوزیشن هنگام نمایش تکست ویو که باید در متد oncreate صدا بزنید)
کد پی‌اچ‌پی:
scrollView.post(new Runnable() {
        public 
void run() {
            
setScrollSpot(scrollSpot);
        }
    }); 


و از متدgetScrollSpot (برای ذخیره کردن پوزیشن آخرین اسکرول که این متد رو باید هنگام ازبین رفتن اکتیویتی صدا بزنید.
کد پی‌اچ‌پی:
protected void onDestroy() {
    
scrollSpot getScrollSpot();

بدنه  این دومتد هم در زیر اومده (زیاد با ساختار بدنه کلنجار نرید، و احتیاجی نیست. فقط بدونید متد get  براساس پوزیشن scroll   یه مقدار float  بر میگردونه).
کد پی‌اچ‌پی:
private float getScrollSpot() {
    
int y scrollView.getScrollY();
    
Layout layout textView.getLayout();
    
int topPadding = -layout.getTopPadding();
    if (
<= topPadding) {
        return (float) (
topPadding y) / textView.getLineHeight();
    }

    
int line layout.getLineForVertical(1) + 1;
    
int offset layout.getLineStart(line);
    
int above layout.getLineTop(line) - y;
    return 
offset + (float) above textView.getLineHeight();
}

private 
void setScrollSpot(float spot) {
    
int offset = (int) spot;
    
int above = (int) ((spot offset) * textView.getLineHeight());
    
Layout layout textView.getLayout();
    
int line layout.getLineForOffset(offset);
    
int y = (line == ? -layout.getTopPadding() : layout.getLineTop(line))
        - 
above;
    
scrollView.scrollTo(0y);

این روش بالا میتونه تاحدی بهتون کمک کنه..روشهایی دیگه هم هست که روشهای دیگه یا پیچیده تر هستند یا باگهای خاص خودش داره..میتونید روشهای دیگه رو در سایت StackOverflow پیدا کنید.