তালিকাভিউয়ের অভ্যন্তরে ফোকাসযোগ্য এডিটেক্সট


121

আমি এ পর্যন্ত প্রায় 6 ঘন্টা ব্যয় করেছি, এবং রাস্তাঘাটগুলি ছাড়া কিছুই হিট করছি। সাধারণ ভিত্তিটি হ'ল একটিতে কিছু সারি রয়েছে ListView(এটি অ্যাডাপ্টারের দ্বারা উত্পাদিত, অথবা শিরোনামের দৃশ্য হিসাবে যুক্ত করা হোক) এতে একটি EditTextউইজেট এবং এ রয়েছে Button। আমি যা যা করতে চাই তা হল জগল / তীরগুলি ব্যবহার করতে, সাধারণের মতো পৃথক আইটেমগুলিতে নির্বাচককে নেভিগেট করতে সক্ষম, তবে যখন আমি একটি নির্দিষ্ট সারিতে পৌঁছাতে পারি - এমনকি যদি আমাকে স্পষ্টভাবে সারিটি সনাক্ত করতে হয় - তবে এতে মনোনিবেশযোগ্য বাচ্চা, আমি চাই যে বাচ্চারটি নির্বাচকের সাথে অবস্থানটি নির্দেশ করার পরিবর্তে মনোযোগ দিন take

আমি অনেক সম্ভাবনা চেষ্টা করেছি এবং এখনও পর্যন্ত ভাগ্য হয়নি।

লেআউট:

<ListView
    android:id="@android:id/list" 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent"
    />

শিরোনাম দর্শন:

EditText view = new EditText(this);
listView.addHeaderView(view, null, true);

ধরে নিচ্ছি অ্যাডাপ্টারে অন্যান্য আইটেম রয়েছে, তীরচিহ্নগুলি ব্যবহার করে প্রত্যাশার মতো তালিকায় নির্বাচনটি নীচে / নীচে সরানো হবে; তবে শিরোনাম সারিটিতে EditTextপৌঁছানোর সময় এটি নির্বাচকটির সাথেও প্রদর্শিত হয় এবং জগবলটি ব্যবহার করে ফোকাস করার কোনও উপায় নেই । দ্রষ্টব্য: EditText ইচ্ছায় আলতো চাপলে তা সেই মুহুর্তে ফোকাস করবে, তবে এটি কোনও টাচস্ক্রিনের উপর নির্ভর করে, যা কোনও প্রয়োজন হবে না।

ListViewস্পষ্টতই এই বিষয়ে দুটি পদ্ধতি রয়েছে:
setItemsCanFocus(true): নির্বাচক কখনও প্রদর্শিত হয় না, তবে EditTextতীরগুলি ব্যবহার করার সময় মনোযোগ পেতে পারেন। ফোকাস অনুসন্ধান অ্যালগরিদম ভবিষ্যদ্বাণী করা কঠিন, এবং কোন আইটেম বাছাই করা হয়েছে তার উপর কোনও ভিজ্যুয়াল প্রতিক্রিয়া (কোনও সারি: ফোকাসযোগ্য বাচ্চাদের আছে কি না) উভয়ই ব্যবহারকারীকে একটি অপ্রত্যাশিত অভিজ্ঞতা দিতে পারে।
setItemsCanFocus(false): নির্বাচক সর্বদা অ-টাচ-মোডে টানা থাকে এবং EditTextআপনি কখনই এতে ফোকাস পান না - এমনকি যদি আপনি এটিতে ট্যাপ করেন তবে।

বিষয়টিকে আরও খারাপ করার জন্য, কলিং editTextView.requestFocus()সত্য বলে প্রত্যাখ্যান করে তবে বাস্তবে এডিটেক্সট ফোকাস দেয় না।

আমি যেটি কল্পনা করছি তা মূলত 1 এবং 2 এর একটি সংকর, যেখানে তালিকাগুলি সেট করার পরিবর্তে সমস্ত আইটেম যদি ফোকাসযোগ্য হয় বা না হয় তবে আমি একটিটির জন্য মনোযোগ সেট করতে চাই একক আইটেমের , যাতে নির্বাচক নির্বাচনটি থেকে নির্বাচন করে পরিবর্তিত হয় ফোকাসযোগ্য নয় এমন আইটেমের জন্য পুরো সারি এবং ফোকাসযোগ্য বাচ্চাদের অন্তর্ভুক্ত আইটেমগুলির জন্য ফোকাস ট্রিটিকে অতিক্রম করা।

কোনো সেবার?

উত্তর:


101

দুঃখিত, আমার নিজের প্রশ্নের উত্তর দিয়েছেন। এটি সবচেয়ে সঠিক বা সর্বাধিক মার্জিত সমাধান নাও হতে পারে তবে এটি আমার পক্ষে কাজ করে এবং বেশ শক্ত ব্যবহারকারী অভিজ্ঞতা দেয়। দুটি আচরণ এতই আলাদা কেন তা দেখতে আমি তালিকার ভিডের কোডটি সন্ধান করেছি এবং এটি তালিকাভিউ.জভা থেকে এসেছি:

    public void setItemsCanFocus(boolean itemsCanFocus) {
        mItemsCanFocus = itemsCanFocus;
        if (!itemsCanFocus) {
            setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
        }
    }

সুতরাং, কল করার সময় setItemsCanFocus(false), এটি বংশোদ্ভূত মনোনিবেশকেও সেট করে যাতে কোনও শিশু ফোকাস পেতে না পারে। এটি ব্যাখ্যা করে যে কেন আমি কেবল mItemsCanFocusতালিকাভিউ'র অনআইটেমসিলেক্টলিস্টার-এ টগল করতে পারিনি - কারণ তালিকাগুলি তখন সমস্ত বাচ্চার দৃষ্টি নিবদ্ধ করে bl

আমার এখন যা আছে:

<ListView
    android:id="@android:id/list" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent"
    android:descendantFocusability="beforeDescendants"
    />

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

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

public void onItemSelected(AdapterView<?> listView, View view, int position, long id)
{
    if (position == 1)
    {
        // listView.setItemsCanFocus(true);

        // Use afterDescendants, because I don't want the ListView to steal focus
        listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
        myEditText.requestFocus();
    }
    else
    {
        if (!listView.isFocused())
        {
            // listView.setItemsCanFocus(false);

            // Use beforeDescendants so that the EditText doesn't re-take focus
            listView.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
            listView.requestFocus();
        }
    }
}

public void onNothingSelected(AdapterView<?> listView)
{
    // This happens when you start scrolling, so we need to prevent it from staying
    // in the afterDescendants mode if the EditText was focused 
    listView.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
}

মন্তব্য করা আউট setItemsCanFocusকল নোট করুন । এই কলগুলির সাথে, আমি সঠিক আচরণ পেয়েছি, তবে setItemsCanFocus(false)এডিট টেক্সট থেকে ফোকাসের কারণে, লিস্টভিউয়ের বাইরে অন্য উইজেটে লিস্টভিউতে ফিরে এসে পরবর্তী নির্বাচিত আইটেমে নির্বাচক প্রদর্শিত হয়েছে এবং সেই জাম্পিং ফোকাসটি বিভ্রান্তিকর ছিল। আইটেমক্যানফোকাস পরিবর্তনটি সরানো, এবং বংশধরদের মনোযোগ কেন্দ্রীভূত করার বিষয়টি আমাকে পছন্দসই আচরণ পেয়েছে। সমস্ত আইটেম সিলেক্টরকে সাধারণ হিসাবে আঁকেন, তবে এডিট টেক্সট সহ সারিটিতে পৌঁছালে এটি পরিবর্তে পাঠ্য ক্ষেত্রের দিকে দৃষ্টি নিবদ্ধ করে। তারপরে সেই সম্পাদনা পাঠ্যক্রমের বাইরে যাওয়ার সময় এটি আবার নির্বাচককে আঁকতে শুরু করে।


খুব দুর্দান্ত, এখনও পরীক্ষা হয়নি didn't আপনি কি 1.5, 1.6 এবং 3.0 এ পরীক্ষা করেছেন?
রাফায়েল সান্চস

রাফায়েল স্যাঞ্চেস: আমি ২.১-এর পরে প্রকল্পটি স্পর্শ করি নি, তবে সেই সময়ে এটি 1.5, 1.6 এবং 2.1 তে কাজ করার বিষয়টি নিশ্চিত হয়েছিল। আমি এখনও কোনও গ্যারান্টি দিচ্ছি না যে এটি এখনও ২.২ বা তার পরে কাজ করে।
জো

13
কেবলমাত্র অ্যান্ড্রয়েডের দরকার: বংশোক্তি ফোকাসেবিলিটি = "পরে ডিজাইনসেন্টস" - যাইহোক +1
কেলোগগুলি ২:5

5
@ কেলোগগুলি: হ্যাঁ, descendantFocusability="afterDescendants"আপনার সম্পাদনা পাঠ্য তালিকাগুলির অভ্যন্তরে ফোকাস নিতে অনুমতি দেবে, কিন্তু তারপরে আপনি কিছুই পাবেন না ডিপ্যাড দিয়ে নেভিগেট করার সময় তালিকা আইটেম সিলেক্টর । আমার কাজটি হ'ল এডিট টেক্সটযুক্ত একটি ব্যতীত অন্য সমস্ত সারিটিতে তালিকা আইটেম নির্বাচনকারী ছিল। খুশি যদিও এটি সাহায্য করেছে। এফডাব্লুআইডাব্লু, আমরা এই বাস্তবায়নটির পুনর্মূল্যায়ন করে শেষ করেছি এবং সিদ্ধান্ত নিয়েছি যে একটি লিস্টভিউয়ের অভ্যন্তরে ফোকাসযোগ্য কেবল আইডোমেটিক-অ্যান্ড্রয়েড ইউআই ডিজাইন নয়, তাই আমরা এই ধারণাটিকে আরও অ্যান্ড্রয়েড-বান্ধব পদ্ধতির পক্ষে ফেলেছি।
জো

5
আইসক্রিম স্যান্ডউইচ এ পরীক্ষা করা হয়েছে? আমি এটি কাজ করতে পারি না। ধন্যবাদ।
রজত অনন্তরাম

99

এটি আমাকে সাহায্য করেছিল।
আপনার প্রকাশে:

<activity android:name= ".yourActivity" android:windowSoftInputMode="adjustPan"/>

3
আমি প্রাসঙ্গিকতা দেখতে নিশ্চিত নই। উইন্ডোসফট ইনপুটমোড সেট করা আইএমইটি উইন্ডোটির বাকি অংশগুলি যখন খোলা থাকে তখন ঠিকঠাক করে দেয়। এটি আপনাকে তালিকাভুক্তির ফোকাসের ধরণের নির্বাচনটি নির্বাচন করতে দেয় না। আপনি কি আরও কিছুটা ব্যাখ্যা করতে পারেন, এটি প্রাথমিক ব্যবহারের ক্ষেত্রে কীভাবে সম্পর্কিত?
জো

1
@ জো যখন আইএমই খোলা হয়, তখন কার্সার - এবং সম্ভবত ফোকাসও - কেবল আমার স্ক্রিনে ঝাঁপিয়ে পড়ে, পাঠ্যটিকে ইনপুট করা অসম্ভব করে তোলে। আপনার OnItemSelectedListenerএটি পরিবর্তন হয় না। তবে Iogan এর সহজ সমাধান একটি কবজ মত কাজ করে, ধন্যবাদ!
গাবলে

2
@ গুবেল: প্রকৃতপক্ষে, এটি একেবারেই বদলাবে না, কারণ আসল প্রশ্নটি সম্পূর্ণ আলাদা কিছু নিয়ে হয়েছিল :) খুশী লোগানের ফিক্স আপনি যা খুঁজছিলেন তার জন্য কাজ করে, তবে এটি কেবল দূরবর্তীভাবে প্রশ্নের সাথে সম্পর্কিত নয়।
জো

8
জোসের android:descendantFocusabilityসম্পত্তি এই প্লাসটি ব্যবহার করে কীবোর্ডটি সঠিকভাবে সমাধান করার EditTextজন্য আমার অভ্যন্তরটি পেয়েছে ListView, উভয়কেই উত্সাহিত করেছে। android:descendantFocusabilityনিজেই কৌতুকটি করেনি এবং আমি যে @Overriding onItemSelectedসমস্ত 14 EditTextটি মোকাবিলা করতে হয়েছিল তার জন্য আমি দূর থেকে উত্সাহী ছিলাম না । :) ধন্যবাদ!
থমসন কমার

এটি আমার পক্ষে কাজ করেছে তবে লক্ষ্য করুন যে আপনি ট্যাবহোস্ট বা ট্যাবঅ্যাক্টিভিটি ব্যবহার করছেন, আপনাকে ম্যানিফেস্টে ট্যাবঅ্যাক্টিভিটি সংজ্ঞার জন্য অ্যান্ড্রয়েড: উইন্ডোসফট ইনপুটমড = "অ্যাডজাস্টপ্যান" সেট করতে হবে।
কিডক্সা

18

আমার কাজটি ছিল ListViewক্লিক করা হলে প্রসারিত যা প্রয়োগ করা । অতিরিক্ত স্পেস শোEditText যেখানে আপনি কিছু পাঠ্য ইনপুট করতে পারেন। অ্যাপ্লিকেশনটি 2.2+ এ কার্যকর করা উচিত (এটি লেখার সময় 4.2.2 অবধি)

আমি এই পোস্টটি এবং অন্যান্যরা খুঁজে পেতে পারি এমন অসংখ্য সমাধান চেষ্টা করেছি; এগুলিকে 2.2 পর্যন্ত 4.2.2 ডিভাইস পর্যন্ত পরীক্ষা করেছে। সমাধানগুলির কোনওটিই সমস্ত ডিভাইস ২.২++ তে সন্তুষ্ট ছিল না, প্রতিটি সমাধান বিভিন্ন সমস্যার সাথে উপস্থাপিত হয়েছিল।

আমি আমার চূড়ান্ত সমাধান ভাগ করে নিতে চেয়েছিলাম:

  1. তালিকা প্রদর্শন সেট android:descendantFocusability="afterDescendants"
  2. তালিকা প্রদর্শন সেট setItemsCanFocus(true);
  3. আপনার কার্যকলাপ সেট করুন android:windowSoftInputMode="adjustResize" অনেকে পরামর্শ দেয় তবে আরও ভাল ux দেয় adjustPanতবে adjustResizeআপনার ক্ষেত্রে এটি পরীক্ষা করুন। সঙ্গেadjustPanআপনার উদাহরণস্বরূপ নীচের তালিকাটি অস্পষ্ট পাবেনদস্তাবেজগুলি পরামর্শ দেয় যে ("এটি আকার পরিবর্তনের চেয়ে সাধারণত কম পছন্দসই")। এছাড়াও 4.0.4 এ ব্যবহারকারী নরম কীবোর্ডে টাইপ শুরু করার পরে স্ক্রিনটি শীর্ষে প্যান করে দেয়।
  4. সাথে 4.2.2 এ adjustResizeএডিটেক্সট ফোকাসের সাথে কিছু সমস্যা রয়েছে। সমাধানটি এই থ্রেড থেকে rjrjr সমাধান প্রয়োগ করা হয়। দেখতে এলোমেলো লাগছে কিন্তু তা নয়। এবং এটি কাজ করে। এটা চেষ্টা করুন.

অতিরিক্ত 5. অ্যাডাপ্টার রিফ্রেশ হওয়ার কারণে (দেখার পুনরায় আকারের কারণে) কখনEditText রাইজাইজের প্রাক হানিকম্ব সংস্করণে ফোকাস পাওয়া যায় তখন আমি বিপরীত দর্শন সহ একটি সমস্যা পেয়েছি: লিস্টভিউ আইটেমের জন্য ভিউ পেয়েছি / ২.২ উপর বিপরীত ক্রম; 4.0.3 এ কাজ করে

আপনি যদি কিছু অ্যানিমেশন করছেন তবে আপনি আচরণ পরিবর্তন করতে চাইতে পারেন adjustPan প্রাক-মধুচক্রীয় সংস্করণগুলির জন্য যাতে আকার পরিবর্তন না করে আগুন এবং অ্যাডাপ্টার দর্শনগুলি রিফ্রেশ না করে। আপনার এই জাতীয় কিছু যুক্ত করতে হবে

if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB)
        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

এগুলি 2.2 - 4.2.2 ডিভাইসে গ্রহণযোগ্য ux দেয়। আশা করি এটি মানুষকে কিছুটা সময় সাশ্রয় করবে কারণ আমাকে এই সিদ্ধান্তে আসতে কমপক্ষে কয়েক ঘন্টা সময় লেগেছে।


1
আমার ক্ষেত্রে যথেষ্ট প্রথম এবং দ্বিতীয় ধাপ
কল্পনা লখানি

অ্যারেএডাপ্টারে আমার xElement.setOnClickListener (..) এবং একটি তালিকাভিউ.সেটঅনআইটেমিক্লিকলিস্টার (...) - এর সাথে শেষ পর্যন্ত পুরোপুরি কাজ করে! বড় thx।
জাভাতর

10

এটি আমার জীবন বাঁচিয়েছে --->

  1. এই লাইন সেট করুন

    ListView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);

  2. তারপরে আপনার ম্যানিফেস্টে ক্রিয়াকলাপে এটি টাইপ করুন ->

    <activity android:windowSoftInputMode="adjustPan">

আপনার স্বাভাবিক অভিপ্রায়


7

আমরা এটি একটি সংক্ষিপ্ত তালিকায় চেষ্টা করছি যা কোনও দর্শন পুনর্ব্যবহার করে না। এ পর্যন্ত সব ঠিকই.

এক্সএমএল:

<RitalinLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
  <ListView
      android:id="@+id/cart_list"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:scrollbarStyle="outsideOverlay"
      />
</RitalinLayout>

জাভা:

/**
 * It helps you keep focused.
 *
 * For use as a parent of {@link android.widget.ListView}s that need to use EditText
 * children for inline editing.
 */
public class RitalinLayout extends FrameLayout {
  View sticky;

  public RitalinLayout(Context context, AttributeSet attrs) {
    super(context, attrs);

    ViewTreeObserver vto = getViewTreeObserver();

    vto.addOnGlobalFocusChangeListener(new ViewTreeObserver.OnGlobalFocusChangeListener() {
      @Override public void onGlobalFocusChanged(View oldFocus, View newFocus) {
        if (newFocus == null) return;

        View baby = getChildAt(0);

        if (newFocus != baby) {
          ViewParent parent = newFocus.getParent();
          while (parent != null && parent != parent.getParent()) {
            if (parent == baby) {
              sticky = newFocus;
              break;
            }
            parent = parent.getParent();
          }
        }
      }
    });

    vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
      @Override public void onGlobalLayout() {
        if (sticky != null) {
          sticky.requestFocus();
        }
      }
    });
  }
}

কিছুটা সংশোধন করা হয়েছে, এই সমাধানটি আমার জন্য @ # এর 2 দিন পরে কাজ করে : ( যদি (স্টিকি! = নাল) {স্টিকি। রিকুয়েস্টফোকাস (); স্টিকি R রিকুয়েস্টফোকস ফ্রমটচ (); স্টিকি = নাল;
Chris

4

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

প্রাথমিক ফোকাসটি হারিয়ে ফেলার পরে সম্পাদনা পাঠ্যগুলিকে ফোকাস দেওয়ার জন্য আমার পাওয়া একমাত্র হ্যাকটি হ'ল:

    searchText.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            // LOTS OF HACKS TO MAKE THIS WORK.. UFF...
            searchButton.requestFocusFromTouch();
            searchText.requestFocus();
        }
    });

প্রচুর ঘন্টা হারিয়েছে এবং এটি আসল সমাধান নয়। আশা করি এটি শক্ত কাউকে সাহায্য করবে।


2

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

যে ওয়ার্কআরউন্ডস সেট করেছে adjustPan, FOCUS_AFTER_DESCENDANTSবা ম্যানুয়ালি ফোকাস করা অবস্থানটি মনে রাখে, সেগুলি কেবলমাত্র কাজের ক্ষেত্র। তাদের কোণার কেসগুলি রয়েছে (স্ক্রোলিং + সফট কীবোর্ড সমস্যা, সম্পাদনা পাঠ্য ক্ষেত্রে ক্যারেট বদলানো অবস্থান)। তারা তালিকাগুলি ম্যাসেজ করার সময় দেখা ভিউ তৈরি করে / ধ্বংস করে দেয় এই বিষয়টি তারা পরিবর্তন করে না notifyDataSetChanged

রিসাইক্লারভিউয়ের সাথে আপনি পৃথক সন্নিবেশ, আপডেট এবং মুছে ফেলা সম্পর্কে অবহিত করেন। ফোকাস হারাতে ফর্ম নিয়ন্ত্রণ নিয়ে কোনও সমস্যা নেই বলে ফোকাস করা ভিউ পুনরায় তৈরি করা হচ্ছে না। একটি যুক্ত বোনাস হিসাবে, রিসাইক্লারভিউ তালিকা আইটেম সন্নিবেশ এবং অপসারণগুলি অ্যানিমেট করে।

কীভাবে শুরু করবেন সে সম্পর্কে অফিসিয়াল ডক্সের একটি উদাহরণ RecyclerView: বিকাশকারী গাইড - রিসাইক্লার ভিউ দিয়ে একটি তালিকা তৈরি করুন


1

আপনি যখন android:windowSoftInputMode="stateAlwaysHidden"মেনিফেস্ট ক্রিয়াকলাপ বা এক্সএমএল ব্যবহার করেন তখন কিছু সময় এটি কীবোর্ড ফোকাস হারাবে। সুতরাং প্রথমে আপনার এক্সএমএল এবং ম্যানিফেস্টে সেই সম্পত্তিটি পরীক্ষা করুন, যদি সেখানে থাকে তবে কেবল এটি মুছে ফেলুন। পার্শ্ব ক্রিয়াকলাপে ফাইলটি প্রকাশ করতে এই বিকল্পগুলি যুক্ত করার পরে android:windowSoftInputMode="adjustPan"এবং এই সম্পত্তিটি এক্সএমএল-তে তালিকাভিউতে যুক্ত করুনandroid:descendantFocusability="beforeDescendants"


0

আর একটি সহজ সমাধান হ'ল আপনার লিস্টএডাপ্টারের গেটভিউ (..) পদ্ধতিতে আপনার ক্লিকক্লিসটিনারের সংজ্ঞা দেওয়া।

public View getView(final int position, View convertView, ViewGroup parent){
    //initialise your view
    ...
    View row = context.getLayoutInflater().inflate(R.layout.list_item, null);
    ...

    //define your listener on inner items

    //define your global listener
    row.setOnClickListener(new OnClickListener(){
        public void onClick(View v) {
            doSomethingWithViewAndPosition(v,position);
        }
    });

    return row;

এইভাবে আপনার সারিটি ক্লিকযোগ্য এবং আপনার অভ্যন্তরীণ দৃশ্যটিও :)


1
প্রশ্নটি ক্লিকযোগ্যতার সাথে নয়, ফোকাসের সাথে সম্পর্কিত।
জো

0

তালিকা সেলের জন্য ফোকাসটি কাজ করা সবচেয়ে গুরুত্বপূর্ণ অংশ । বিশেষত গুগল টিভিতে তালিকার জন্য এটি প্রয়োজনীয়:

তালিকা প্রদর্শনের setItemsCanFocus পদ্ধতিটি কৌশলটি করে:

...
mPuzzleList = (ListView) mGameprogressView.findViewById(R.id.gameprogress_puzzlelist);
mPuzzleList.setItemsCanFocus(true);
mPuzzleList.setAdapter(new PuzzleListAdapter(ctx,PuzzleGenerator.getPuzzles(ctx, getResources(), version_lite)));
...

আমার তালিকা সেল xML নীচের মত শুরু:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:id="@+id/puzzleDetailFrame"
             android:focusable="true"
             android:nextFocusLeft="@+id/gameprogress_lessDetails"
             android:nextFocusRight="@+id/gameprogress_reset"
...

নেক্সটফোকস লেফট / ডান ডি-প্যাড নেভিগেশনের জন্যও গুরুত্বপূর্ণ।

আরও তথ্যের জন্য দুর্দান্ত অন্যান্য উত্তরগুলি দেখুন।


0

আমি সবেমাত্র অন্য একটি সমাধান খুঁজে পেয়েছি। আমি বিশ্বাস করি এটি সমাধানের চেয়ে বেশি হ্যাক তবে এটি অ্যান্ড্রয়েড ২.৩..7 এবং অ্যান্ড্রয়েড 4..৩ এ কাজ করে (

আপনার ওয়েবভিউটি যথারীতি সূচনা করুন এবং এটি যুক্ত করুন: (মাইকেল বাইম্যানকে ধন্যবাদ)

listView.setItemsCanFocus(true);

গেটভিউ কল চলাকালীন:

editText.setOnFocusChangeListener(
    new OnFocusChangeListener(View view,boolean hasFocus){
        view.post(new Runnable() {
            @Override
            public void run() {
                view.requestFocus();
                view.requestFocusFromTouch();
            }
     });

ভিউ.রেউকস্টফোকাসে এখানে কী দেখছে?
নরেন্দ্র সিং

এটি একটি পুরানো উত্তর তবে এটি বিশ্বাস করি যে অনফোকাস চেঞ্জলাইস্টেনারকে আমি বিশ্বাস করি
আলেরে

1
এটি ফোকাস পরিবর্তন করতে একটি লুপ কারণ।
মরতেজা রাস্টগু

0

শুধু এই চেষ্টা করুন

android:windowSoftInputMode="adjustNothing"

মধ্যে

কার্যকলাপ

আপনার প্রকাশের বিভাগ। হ্যাঁ, এটি নোটিংগুলি সামঞ্জস্য করে যার অর্থ আইএমই খোলার সময় এডিট টেক্সট যেখানে থাকবে। তবে এটি কেবলমাত্র একটু অসুবিধা যা এখনও ফোকাস হারাতে সমস্যাটিকে পুরোপুরি সমাধান করে।

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