2013-01-29 45 views
14

मैं एक एंड्रॉइड ऐप लिख रहा हूं जो एक पाठ फ़ाइल पढ़ता है और इसे TextView पर प्रदर्शित करता है।एंड्रॉइड - टेक्स्टव्यू में आप बड़ी मात्रा में टेक्स्ट कैसे लोड करते हैं?

क्या मैं अभी कर रहा हूँ एक स्ट्रिंग में पूरी फ़ाइल पढ़ा जाता है (BufferedReader और StringBuilder प्रयोग करके) और एक TextViewsetText(string) का उपयोग करने पर यह प्रदर्शित करते हैं। एक 700 केबी पाठ फ़ाइल को स्क्रीन पर प्रदर्शित होने से पहले लगभग 2 से 3 सेकंड लग सकते हैं।

लेकिन मैंने बाजार पर कुछ अन्य ईबुक पाठकों का उपयोग किया है और वे लगभग उसी पाठ को तुरंत प्रदर्शित कर सकते हैं। कोई भी जानता है कि मैं इसे कैसे प्राप्त कर सकता हूं?

धन्यवाद।

संपादित करें: कई लोग सूची दृश्य का सुझाव देते हैं, लेकिन यह मेरे विशेष मामले के लिए काम नहीं करता है। यह उत्तर में से किसी एक के जवाब से है: ... [ListView] कुछ कारणों से मेरे लिए काम नहीं करता है। (1) लिस्टव्यू को टेक्स्ट व्यू की तरह दिखने के लिए, हमें टेक्स्ट को नए लाइन कैरेक्टर पर तोड़ना होगा। यदि मैं एक बड़ा अनुच्छेद लोड करता हूं, तो यह टेक्स्टव्यू लोड करने के जितना धीमा है। (2) चूंकि लिस्ट व्यू केवल स्क्रीन पर आइटम को मापता है, इसलिए मैं पूरे पाठ के कुल 'पेज' या 'ऊंचाई' के समय से पहले नहीं जान सकता।

उत्तर

6

अनिवार्य रूप से, कुंजी केवल उस डेटा को लोड करना है जिसकी आपको आवश्यकता है, जब आपको इसकी आवश्यकता हो। ऐसा करने का एक तरीका यह होगा कि प्रत्येक पैराग्राफ को अपने स्वयं के टेक्स्ट व्यू में डाला जाए, जिसे ListAdapter में रखा गया है, जिसे ListView में शामिल किया गया है। किसी प्रकार का इंडेक्स सेट होना चाहिए, जैसे कि प्रत्येक अनुच्छेद जानता है कि डेटा फ़ाइल में कहां मिलना है। यह इंटरफ़ेस आपको केवल वही लोड करने की अनुमति देगा जब आपको इसकी आवश्यकता हो।

class ParagraphAdapter extends ListAdapter{ 
ArrayList<Integer> mLocations; // Somewhere define this to your locations, I'll leave that for you to figure out 
protected View getView(int position,View convertView, ViewGroup parent) 
{ 
    mLocations.get(position); // Read the file starting at this position, until the next value 
    String text; // This is the output of the above 
    TextView tv=new TextView(context); 
    tv.setText(parent.getContext()); 
} 
} 

यह ध्यान दिया जा सकता है कि अमेज़न के लिए पेजिंग की एक प्रणाली का उपयोग करता है: आपका सूची एडाप्टर कुछ इस तरह (यह कोड पूरा नहीं हुआ है, लेकिन यह आपको आपको क्या करना चाहिए कम से कम एक विचार देना चाहिए) लग रहा है किंडल ऐप। यदि आपके पास ऐप है, तो आप प्रत्येक पृष्ठ के नीचे देख सकते हैं कि आप किस अनुभाग पर हैं। प्रत्येक "पृष्ठ" शायद एक वाक्य या इतने लंबे समय के करीब है। तो यह सिर्फ सही पृष्ठ प्राप्त करने का मामला है, जो काफी जल्दी किया जा सकता है।

+0

मुझे अंततः समस्या से निपटने के लिए कुछ समय मिला और यह समाधान कुछ कारणों से मेरे लिए काम नहीं करता है। (1) लिस्टव्यू को टेक्स्ट व्यू की तरह दिखने के लिए, हमें टेक्स्ट को नए लाइन कैरेक्टर पर तोड़ना होगा। यदि मैं एक बड़ा अनुच्छेद लोड करता हूं, तो यह टेक्स्टव्यू लोड करने के जितना धीमा है। (2) चूंकि लिस्ट व्यू केवल स्क्रीन पर आइटम को मापता है, इसलिए मैं पूरे पाठ के कुल 'पेज' या 'ऊंचाई' के समय से पहले नहीं जान सकता। –

2

क्या @PearsonArtPhoto ने कहा है पर जोड़ने के लिए -

मैं सुझाव है कि आप, पेजिंग तंत्र के कुछ प्रकार लागू पृष्ठों में अपने पाठ को विभाजित करने की।
आपको क्या करना चाहिए, यह बताएं कि प्रत्येक पृष्ठ के अक्षरों की संख्या एन + एम संख्या के अनुसार है।
एन = वर्णों की निश्चित संख्या।
एम = लाइन वर्ण के निकटतम अंत तक एन से वर्णों की संख्या (इसलिए आपको अंतिम लाइन "कट" नहीं दिखाई देगी)।
मैं सुझाव दूंगा कि यदि आपका एंड्रॉइड डिवाइस आपको "स्मृति में" रखने की अनुमति देता है -
ऐसा करें,
और इसे फ़ाइल के बाद एक पृष्ठ से दूसरे पृष्ठ पर लाने की कोशिश न करें, बल्कि "इन" स्मृति "संरचना - यह प्रदर्शन में सुधार होगा।
एक बार जब आप स्क्रॉल करते हैं और महसूस करते हैं कि आपको अगले पृष्ठ को लाने की आवश्यकता है, तो इसे "स्मृति में" संरचना से प्राप्त करें।

0

आपको यह विचार करना होगा कि क्या आप सही घटकों का उपयोग कर रहे हैं। शायद यह लाइनों को पढ़ने और उन्हें सूचीदृश्य में रखने के लिए बेहतर है।

कोशिश

List<String> lines; 
listview.adapter(new ArrayAdapter<String>(...,lines)); 

और कई बार है कि आप जो देखते हैं (देखो और महसूस) जैसा नहीं है आपको लगता है कर रहे हैं।

1

लुकास रोचा ने उस उद्देश्य के लिए स्मूथी नामक एक अच्छी लाइब्रेरी बनाई।

http://lucasr.org/2012/04/05/performance-tips-for-androids-listview/

एंड्रॉयड सूचीदृश्य के लिए उन प्रदर्शन सुझावों के अंत में स्मूथी के बारे में एक व्याख्या करने के लिए एक लिंक भी है और अंत में आप पुस्तकालय GitHub पर दिखाई देंगे।

मूल रूप से छवियों को लोड करने के लिए वर्णित, दृष्टिकोण पाठ को लोड करने के लिए भी लागू होता है।

+0

एसओ में आपका स्वागत है! अपने उत्तर की गुणवत्ता में सुधार करने और पुस्तकालय को लागू करने के तरीके को प्रदर्शित करने के तरीके को प्रदर्शित करने के लिए अपने उत्तर की गुणवत्ता में सुधार करने पर विचार करें (यानी लिंक अब काम नहीं करता है) जिसके लिए आपने समस्या का लिंक प्रदान किया है। – J0e3gan