অ্যান্ড্রয়েড-সমর্থন-ভি 4 এর সাথে পছন্দের ফ্রেমের বিকল্প


90

আমি আমার অ্যাপ্লিকেশনটির বিকাশে হঠাৎ থামতে এসেছি কারণ আমি বুঝতে পেরেছি যে লাইব্রেরিতে পছন্দসই অংশগুলি সমর্থিত নয়। কোনও বাধা অ্যান্ড্রয়েড বিকাশকারী এই বাধা অতিক্রম করতে ব্যবহার করতে পারেন এমন কোনও বিকল্প আছে কি?

এই মুহুর্তে এটি আমার মূল উইন্ডো

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
<TabHost
    android:id="@android:id/tabhost"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_weight="0"/>

        <FrameLayout
            android:id="@+android:id/realtabcontent"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1"/>
    </LinearLayout>

                <TabWidget
            android:id="@android:id/tabs"
            android:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0"
            />

</TabHost>
</LinearLayout>

আমার ট্যাবঅ্যাক্টিভিটির জন্য আমি অনলাইনে পাওয়া কিছু ব্যবহার করছি। এখানে একটি স্নিপেট রয়েছে:

public class TabControlActivity extends FragmentActivity implements TabHost.OnTabChangeListener 
{
public static final int INSERT_ID = Menu.FIRST;
public static TabControlActivity thisCtx;
private TabHost mTabHost;
private HashMap mapTabInfo = new HashMap();
private TabInfo mLastTab = null;

private class TabInfo {
     private String tag;
     private Class clss;
     private Bundle args;
     private Fragment fragment;
     TabInfo(String tag, Class clazz, Bundle args) {
         this.tag = tag;
         this.clss = clazz;
         this.args = args;
     }

}

class TabFactory implements TabContentFactory 
{

    private final Context mContext;

    /**
     * @param context
     */
    public TabFactory(Context context) {
        mContext = context;
    }

    /** (non-Javadoc)
     * @see android.widget.TabHost.TabContentFactory#createTabContent(java.lang.String)
     */
    public View createTabContent(String tag) {
        View v = new View(mContext);
        v.setMinimumWidth(0);
        v.setMinimumHeight(0);
        return v;
    }

}

...*snip*...

অ্যান্ড্রয়েড-সাপোর্ট-ভি 4 সামঞ্জস্য লাইব্রেরি ব্যবহার করে প্রিফ্রেসফ্র্যাগমেন্ট (বা পছন্দসংশ্লিষ্টতা) এর অনুরূপ এমন কিছু বাস্তবায়ন করার কি আছে?



সত্যিকারের সদৃশ নয় কারণ আমি এমন পরিস্থিতিতে আছি যেখানে ট্যাবস্ট্রিস্টের মধ্যে এই পছন্দগুলি দেখানোর জন্য আমার "প্রয়োজন" হয়। আমার সম্পাদনা দেখুন
কোডপ্রাইমেট

দেখুন আমার আপডেট উত্তরPreferenceFragmentCompatসমর্থন লাইব্রেরিতে সম্প্রতি যুক্ত করা হয়েছিল।
theblang

উত্তর:


86

আপডেট - 6/11/2015

সাপোর্ট-ভি 7 লাইব্রেরিতে এখন অন্তর্ভুক্ত রয়েছে PreferenceFragmentCompat। সুতরাং এটি ব্যবহার করা আরও ভাল ধারণা হবে।


আপনার অ্যাপ্লিকেশনটিতে একটি লাইব্রেরি প্রকল্প হিসাবে নিম্নলিখিত প্রকল্পটি যুক্ত করুন।

https://github.com/kolavar/android-support-v4-preferencesfraament

আপনি নিজের খণ্ডের লেনদেন সহ সমস্ত কিছু যেমন রাখতে পারেন তেমন। PreferenceFragmentশ্রেণিটি আমদানি করার সময় , নিশ্চিত করুন সঠিক ইমপোর্ট শিরোনামটি ব্যবহারকারী।

import android.support.v4.preference.PreferenceFragment;

পরিবর্তে

import android.preference.PreferenceFragment;

4
এই গিথুব কোডটিতে গুরুতর সমস্যা রয়েছে বলে মনে হচ্ছে ... আমি ব্যবহার করতে পারি না RingtonePreferenceএবং OnSharedPreferenceChangeListenerকোনও পরিবর্তনও হয় বলে মনে হয় না!
মান্দো স্ট্যাম

4
আমি ভাবছিলাম যে এই লাইব্রেরিটি ব্যবহার করা ভাল ধারণা। তবে আমি বুঝতে পেরেছিলাম যে এটি যতটা ভাবা ঠিক ততটা ভাল নয়। onPrepareOptionMenuপদ্ধতিটিকে ওভাররাইড করার চেষ্টা করা আমাকে একটি অদ্ভুত স্বাক্ষর (রিটার্ন void) দেখায় যা আমরা সবাই জানি (প্রত্যাবর্তন boolean)! একটি গুরুতর সমস্যা।
এস। থিওনগেনে

9
উত্সাহিত, এবং আপনি যখনই মাদ্রিদে আসেন তখন একটি নিখরচায় ডিনারের অধিকারী ... এই সমস্যাটি আমাকে পাগল করছে!
রূপান্তরিত

7
প্রিম্পেরঅপশনস মানসুলস সর্বদা টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো থাকে (ক্রিয়াকলাপগুলির তুলনায় এটি বুলিয়ান), সুতরাং এই স্বাক্ষর সম্পূর্ণরূপে প্রত্যাশিত is
কুম্বায়াহ

4
গ্রন্থাগারের সমস্যাগুলি সম্ভবত গিথুব প্রকল্পে রিপোর্ট করা উচিত।
ম্যাথিজস সেগারস

128

আমি জানি এটি একটি পুরানো প্রশ্ন, তবে আপনি এখন PreferenceFragmentCompatথেকে এটি ব্যবহার করতে পারেনcom.android.support:preference-v7:23.3.0


4
দুর্দান্ত অনুসন্ধান, এটি এখন সঠিক উত্তরগুলির মধ্যে একটি।
মিথ 21

আমার জন্য এটি শুধুমাত্র com.android.support:preferences-v7:23.0.1 এর সাথে কাজ করে।
ফিলিপ মোসো

4
অ্যান্ড্রয়েড স্টুডিও থেকে এটি যুক্ত করার চেষ্টা করার সময় নির্ভরতা সার্ভারগুলিতে এটি মনে হয় না। এর জন্য কি আমার একটি ভান্ডার যুক্ত করতে হবে?
ব্রিল প্যাপিন


4
আমি ঘটনাক্রমে এই উত্তর upvoted এবং আমি এখন এটিকে পূর্বাবস্থায় ফেরাতে পারবেন, তাই পরিবর্তে আমি শুধু মনে রাখবেন পাবেন যে PreferenceFragmentCompatকিছু গুরুত্বপূর্ণ বিষয় রয়েছে: দেখুন এই এবং এই উদাহরণস্বরূপ বাগ রিপোর্ট, এবং আরো অনেক এখানেPreferenceActivityপরিবর্তে অবচয় ব্যবহার করে শেষ করেছি । দীর্ঘশ্বাস
ফেলুন

16

গুরুত্বপূর্ণ আপডেট করুন: সর্বশেষ সংস্করণ এর v7 support libraryএখন একটি নেটিভ হয়েছে PreferenceFragmentCompat

আমি এই লাইব্রেরিটি ব্যবহার করছি , যার একটি AARরয়েছে mavenCentralযাতে আপনি যদি এটি ব্যবহার করেন তবে সহজেই এটি অন্তর্ভুক্ত করতে পারেন Gradle

compile 'com.github.machinarius:preferencefragment:0.1.1'


আপনি কীভাবে সমর্থন খণ্ডটি আমদানি এবং প্রসারিত করবেন তা ভাগ করে নিতে পারেন? ধন্যবাদ
স্টিভেন

4
@ স্টিভ সিউর! আমি তৈরি একটি সারকথা
theblang

@ ম্যাটব্ল্যাং অনেক ধন্যবাদ!
স্টিভেন

@ ম্যাটব্ল্যাং অনেক ধন্যবাদ ... আপনার সাহায্য সত্যই আমার অনেক সময় বাঁচায়
আসাদ উল্লাহ রফিক

ব্যতিক্রম জাভা.এল.আং.আর.টাইম এক্সেপশন: লিখিতভিউ ক্লাস নয় এমন আইডি অ্যাট্রিবিউট 'অ্যান্ড্রয়েড.আর.আইডি.লিস্ট' সহ সামগ্রীর ভিউ রয়েছে
আবদুল রহমান

10

আপনি আমার নিজের ব্যবহার করতে পারেন PreferenceFragment

এটি সহজ এবং এ পর্যন্ত আমার কোনও সমস্যা ছিল না। আমি মনে করি আপনি একক ক্রিয়াকলাপে একবারে কেবল সেগুলির মধ্যে একটি প্রদর্শন করতে পারেন, যা ঠিক হওয়া উচিত।


9

পছন্দসমূহ সমর্থন লাইব্রেরি: এপিআই 7+ এর জন্য পছন্দসই খণ্ডগুলি, কোনও ক্রিয়াকলাপই নয়

একটি সাধারণ বাস্তবায়নের মধ্যে পছন্দসই ফ্রেমমেন্ট কমপ্যাট অন্তর্ভুক্ত থাকবে:

public class PreferencesFragment extends PreferenceFragmentCompat {
    @Override
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
        addPreferencesFromResource(R.xml.preferences);
    }
}

আপনার থিমটিতে আপনার পছন্দসই থিমও সেট করতে হবে:

<style name="AppTheme" parent="@style/Theme.AppCompat.Light">
  <item name="preferenceTheme">@style/PreferenceThemeOverlay</item>
</style>

এবং এটি নির্ভরতাগুলিতে যুক্ত করুন: http://developer.android.com/tools/support-library/features.html

com.android.support:preference-v14:23.1.0

7

আপনি সম্ভবত একটি আসল ক্রিয়াকলাপ ব্যবহার করুন এবং খণ্ড ব্যবহার করবেন তবে আমার পক্ষে এটি ভাল পছন্দ বলে মনে হয় না। আপনার সাধারণ পছন্দনীয় ক্রিয়াকলাপটি ব্যবহার করা উচিত এবং বিপরীতমুখী তুলনামূলক লিবাসের উন্নতির জন্য অপেক্ষা করা উচিত।


4
আমার বাকী অ্যাপ্লিকেশনটিতে একটি ট্যাবজেট রয়েছে বলে আমি একটি পছন্দসই কার্যকলাপ ব্যবহার করতে পারি না। পছন্দসই ট্যাবউজেটের উপরে দেখানোর কথা। এর পরিবর্তে আমি এটিটিকে একটি ক্রিয়াকলাপ তৈরি করেছিলাম এটি পুরো স্ক্রীনটি গ্রহণ করবে।
কোডপ্রাইমেট 20'12

4
তারপরে কিছু কাস্টম তালিকার টুকরোটি ব্যবহার করুন
9


0

আপনি তার পরিবর্তে পছন্দসই কার্যকলাপ থেকে প্রসারিত করতে পারেন , এবং আপনি যদি অ্যাকশনবার চান, তবে আপনি এটি পছন্দসইগুলির জন্য ব্যবহৃত তালিকার উপরে থাকা হিসাবে একটি সরঞ্জামদণ্ড ব্যবহার করে যুক্ত করতে পারেন ।

এটি উল্লম্ব লিনিয়ারলআউট ব্যবহার করে করা যেতে পারে যা সরঞ্জামদণ্ডটি এবং অ্যান্ড্রয়েডের সাথে একটি তালিকাভিউ ধারণ করে : আইডি = "@ অ্যান্ড্রয়েড: আইডি / তালিকা"

আপনি যদি চান, আপনি আমার সমাধান এখানে দেখতে পারেন ।


0

লুসিয়াস যেমন বলেছিলেন আপনি পছন্দসই ফ্রেমমেন্ট কমপ্যাট ব্যবহার করতে পারেন :

public class MyPreferenceFragment extends PreferenceFragmentCompat {
        @Override
        public void onCreatePreferences(Bundle bundle, String s) {               
            PreferenceManager.setDefaultValues(getActivity(), R.xml.preferences, false);
            addPreferencesFromResource(R.xml.preferences);
       }
}

আপনার অবশ্যই এর নির্ভরতা গ্রেডে অন্তর্ভুক্ত করতে হবে:

dependencies {
...
    compile 'com.android.support:preference-v7:23.1.X' (wherX = 0,1,...)
...
}

এইভাবে আপনি android.support.v4.app.FraamentTransaction এবং PrefernceFraament এর FragTT Transaction ব্যবহার করতে পারেন। তবে আপনার থিমগুলির সাথে সমস্যা হতে পারে। যদি এটি হয় তবে আপনি এই পোস্টটিকে ધ્યાનમાં রেখে সমাধান করতে পারেন:

API 14+ এ উপাদান থিম রাখার সময় এআইপি 7+ এ লিবিবটি কাজ করার সমাধান

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.