স্ক্রিন ঘোরার পরে টেক্সটভিউয়ের স্থিতি পুনরুদ্ধার করছেন?


104

আমার অ্যাপে আমি TextViewএবং EditText। উভয় এর মধ্যে তথ্য আছে। স্ক্রিন ওরিয়েন্টেশন যখন EditTextঅবশেষে ডেটা পরিবর্তন করে তবে TextViewডেটা সাফ হয়ে যায়।

কেউ কি আমাকে TextViewখুব বেশি তথ্য ধরে রাখার উপায় খুঁজতে সাহায্য করতে পারে ?

উত্তর:


221

আপনি যদি TextViewতার রাজ্যটি সংরক্ষণ করতে বাধ্য করতে চান তবে আপনাকে অবশ্যই freezesTextগুন যুক্ত করতে হবে :

<TextView 
     ... 
     android:freezesText="true" />

ডকুমেন্টেশন থেকে freezesText:

যদি সেট করা থাকে তবে পাঠ্য দর্শনটিতে বর্তমান কার্সারের অবস্থানের মতো মেটা-ডেটা ছাড়াও হিমায়িত আইিকেলের ভিতরে এটির সম্পূর্ণ সম্পূর্ণ পাঠ্য অন্তর্ভুক্ত থাকবে। ডিফল্টরূপে এটি অক্ষম; কোনও পাঠ্য দৃশ্যের বিষয়বস্তু যখন অবিচ্ছিন্ন স্থানে যেমন একটি সামগ্রী সরবরাহকারী সংরক্ষণ করা না হয় তখন এটি কার্যকর হতে পারে


13
অন্যান্য বৈশিষ্ট্যের মতো (পাঠ্য নির্বাচন, কার্সার অবস্থান ইত্যাদি) ডিফল্টরূপে পাঠ কেন 'হিমায়িত / সংরক্ষণিত' হয় না? অন্য কথায়, কি দৃশ্যকল্প মধ্যে কেউ আসলে হবে পছন্দ করা যে লেখা না সংরক্ষণ করা?
গৌতম

3
@ গৌতম আমার ধারণাটি হ'ল প্রায়শই এক্সএমএলে সঞ্চিত স্ট্যাটিক স্ট্রিংগুলি থেকে টেক্সটভিউগুলি নির্মিত হয়, সেক্ষেত্রে সিস্টেমটির জন্য মূল্যবোধগুলি স্মরণে রাখা অপ্রয়োজনীয়।
anderspitman

3
প্রকৃতপক্ষে, আপনি একবার সম্পাদনা পাঠ্য বা পাঠ্যদর্শনকে একটি আইডি দিলে স্ক্রিন ঘোরানোর ইভেন্টের সময় মানটি অব্যাহত থাকবে।
ডক্টরফক্স

7
@ জেগেশ - দুর্ভাগ্যক্রমে এটি কিছু ডিভাইসে
টেক্সটভিউদের

1
আমার জন্য কাজ না করে, অন্তত একটি API 17 ডিভাইসে
এবি

28

ওরিয়েন্টেশন পরিবর্তনের উপর ডেটা ধরে রাখার জন্য আপনাকে দুটি পদ্ধতি প্রয়োগ করতে হবে:

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    // Read values from the "savedInstanceState"-object and put them in your textview
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    // Save the values you need from your textview into "outState"-object
    super.onSaveInstanceState(outState);
}

5
একই বান্ডিলটি অনক্রিটে উপলভ্য থাকাকালীন কেন অনিয়ন্ত্রিত স্ট্যানস্টেট ব্যবহার করবেন?
স্লট

4
@ স্লট এই ডকুমেন্টেশন চেক করুন। বিকাশকারী.অ্যান্ড্রয়েড / ট্রেনিং / বেসিকস / অ্যাক্টিভিটি- লাইফেসাইকেল_… এটি অনুমানযোগ্য তবে আমার সন্দেহ হয় কারণ এটি কোনও নতুন ক্রিয়াকলাপ তৈরি করছে, বা কোনও পুরানোটিকে পুনরুদ্ধার করছে কিনা তা সিস্টেম ট্র্যাক করে। #RestorySavedInstance কেবল বিরল পরিস্থিতিতে বলা হয় - মেমরির সীমাবদ্ধতার কারণে কনফিগারেশন পরিবর্তন এবং ক্রিয়াকলাপ ধ্বংস destruction
গুসডোর

6

1) কোনও আইডি সহ সমস্ত দর্শন তাদের রাজ্য সংরক্ষণ করে না। একটি আইডি সহ অ্যান্ড্রয়েড উইজেট, যার রাজ্যটি ব্যবহারকারী দ্বারা পরিবর্তন করা যেতে পারে, তাদের রাষ্ট্রকে একটি সফট কিলের সাহায্যে সংরক্ষণ করতে উপস্থিত হয়। সুতরাং এডিটেক্সট তার রাজ্যটি সংরক্ষণ করে, তবে টেক্সটভিউ তার রাষ্ট্রটিকে কোনও সফট কিলের সাহায্যে সংরক্ষণ করে না।

"এএফএইকি, অ্যান্ড্রয়েড কেবল পরিবর্তিত প্রত্যাশিত জিনিসগুলির জন্য রাষ্ট্রের সংরক্ষণকে বিরক্ত করে That এ কারণেই এটি একটি সম্পাদনা পাঠ্যটিতে (যা ব্যবহারকারী পরিবর্তিত হওয়ার সম্ভাবনা রয়েছে) পাঠ্যটি সংরক্ষণ করে এবং সম্ভবত কোনও পাঠ্যদর্শন (যা সাধারণত স্থিতিশীল থাকে) রাষ্ট্রের সংরক্ষণ করে না ) "

মার্ক এম

সুতরাং আপনি onSaveInstanceState এ পাঠ্যদর্শনটির রাজ্যটি বাছাই করতে পারেন এবং আপনি onCreate এ পাঠ্যদর্শনটির অবস্থা পুনরুদ্ধার করতে পারেন।

2) সর্বোত্তম অনুশীলন হ'ল "ঘোষণা করা সত্ত্বেও" অভ্যন্তরীণ "অ দর্শনীয় দৃষ্টান্তের অবস্থা সংরক্ষণ করা

android:configChanges= "orientation|keyboardHidden" 

ডক্স থেকে:

"তবে, আপনার অ্যাপ্লিকেশনটি সর্বদা পূর্ববর্তী অবস্থায় অক্ষত অবস্থায় পুনরায় চালু করতে এবং পুনরায় চালু করতে সক্ষম হওয়া উচিত only কেবলমাত্র অন্যান্য কনফিগারেশন পরিবর্তনগুলির কারণে আপনি আপনার অ্যাপ্লিকেশনটি পুনরায় আরম্ভ করতে বাধা দিতে পারবেন না তবে ইভেন্টগুলি পরিচালনা করতে যেমন ব্যবহারকারীর আগমন ঘটে receives ফোন কল এবং তারপরে আপনার আবেদনে ফিরে আসে returns

Jal


6

অ্যান্ড্রয়েড আপনার জন্য এই ধরণের জিনিস পরিচালনা করে না। আপনি সমস্ত ডেটা ম্যানুয়ালি সংরক্ষণ করেছেন।

আপনি মানগুলি সংরক্ষণ করতে কোনও ক্রিয়াকলাপে ব্যবহার করতে পারেন

@Override
    public Object onRetainNonConfigurationInstance() {
        HashMap<String, Object> savedValues = new HashMap<String, Object>();
        savedValues.put("someKey", someData);           
        return savedValues;
    }

এবং সংরক্ষিত অবজেক্টগুলি লোড করতে কোনও ক্রিয়াকলাপের oncreate পদ্ধতিতে এই জাতীয় কিছু ব্যবহার করুন

HashMap < String, Object> savedValues 
     = (HashMap<String, Object>)this.getLastNonConfigurationInstance();

আপনি কোনও ক্রিয়াকলাপের জন্য অক্ষম ওরিয়েন্টেশন পরিবর্তনও চয়ন করতে পারেন

<activity android:name=".Activity" android:screenOrientation="portrait" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
    </intent-filter>
</activity>

android.support.v4.app.fraamentActivity- এ রিটেনন কনফিগারেশনআইনস্ট্যান্স () -কে ওভাররাইড করতে পারে না; ওভাররাইড পদ্ধতি চূড়ান্ত !!
আকাশ দুবে

1

এটি আপনার ক্রিয়াকলাপ / ক্রিয়াকলাপগুলিতে যুক্ত করে ওরিয়েন্টেশন পরিবর্তনের আচরণকে ওভাররাইড করতে আপনার ক্রিয়াকলাপগুলিকে অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল করুন:

android:configChanges="orientation|keyboardHidden"

এটি কিছুটা এরকম দেখতে হবে:

    <activity android:name=".activity.LoginActivity"
              android:configChanges="orientation|keyboardHidden"
              android:label="@string/app_name">
    </activity>

27
সাধারণভাবে, ডকুমেন্টেশন দ্বারা এই পদ্ধতির প্রস্তাব দেওয়া হয় না : "এই বৈশিষ্ট্যটি ব্যবহার করা এড়ানো উচিত এবং কেবল সর্বশেষ-অবলম্বন হিসাবে ব্যবহার করা উচিত Please রানটাইম পরিবর্তনগুলি হ্যান্ডলিং পড়ুন ..."
ইডব্রি

1

এগুলি অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল এ যুক্ত করুন
আপনার ক্রিয়াকলাপের নামটি ক্রিয়াকলাপ_নামের জায়গায় রাখুন

<activity android:name="Activity_Name"
        android:screenOrientation="sensor"
        ...
        android:configChanges="orientation|keyboardHidden|screenSize">

এটি টেক্সটফিল্ডে মান পরিবর্তন করার সাথেও কাজ করবে।


1

শুধু যোগ কর

android:configChanges="orientation|screenSize"

অ্যান্ড্রয়েডম্যানিফেস্ট.এক্সএমএলে আপনার ক্রিয়াকলাপে।


-2

যখন কনফিগারেশন পরিবর্তন হয় অ্যান্ড্রয়েড ডিফল্টরূপে আপনার ক্রিয়াকলাপ পুনরায় আরম্ভ করে। এটি পরিবর্তন করতে আপনার onConfigurationChanged()পদ্ধতি ওভাররাইড করা উচিত । এছাড়াও, android:configChangesআপনার নিজের মেনিফেস্ট ফাইলটি যুক্ত করা উচিত ।

আপনি এখানে আরও পড়তে পারেন ।


-7

আমিও ব্যবহার করেছি

android:configChanges="orientation"

এবং এটি কার্যকর হয়নি।

তবে আমি একটি সমাধান খুঁজে পেয়েছি।

আপনার ম্যানিস্টে নীচের লাইনটি সঠিকভাবে রয়েছে কিনা তা যাচাই করুন:

<uses-sdk android:minSdkVersion="11" android:targetSdkVersion="11" />

এটি যেমন কিছু না পড়েন তা নিশ্চিত করুন

<uses-sdk android`:minSdkVersion="11" android:targetSdkVersion="15" />`

আমার কাছে এটি দ্বিতীয় স্থানে ছিল তবে আমি যখন এটি সংশোধন করেছি তখন রাষ্ট্রটি সংরক্ষণ করা হয়েছিল।


1
এটি সম্পূর্ণ আলাদা জিনিস। আপনার অ্যাপ্লিকেশনটিকে অ্যান্ড্রয়েড ওএসের সর্বাধিক ব্যাপ্তির সাথে সামঞ্জস্যপূর্ণ করে তোলা লক্ষ্য এসডিকে। এটি কোনও উত্তর নয়, কিছু উপায়ে এটি আপনার ক্ষেত্রে কাজ করতে পারে তবে এটি কোনও অ্যাপ্রোপিয়েট সমাধান নয়।
রোহান কান্দওয়াল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.