2013-01-18 13 views
9

के बीच डी-पैड नेविगेट स्विच का उपयोग कैसे करें मेरे पास एक सूचीदृश्य है जिसमें प्रत्येक सूची आइटम के अंदर एक छविदृश्य है, जब उपयोगकर्ता उस छविदृश्य पर क्लिक करता है, तो यह मेनू पॉप-अप करेगा ।सूचीदृश्य की पंक्ति और उसके निर्णायक (Google-टीवी समर्थन)

यह टच स्क्रीन के साथ एक सामान्य एंड्रॉइड डिवाइस पर बहुत अच्छी तरह से काम करता है।

लेकिन अब मैं Google-टीवी का समर्थन करना चाहता हूं, जिसे ऐप डी-पैड द्वारा नियंत्रित किया जाना चाहिए।

जब मैं सूचीदृश्य के माध्यम से नेविगेट करने के लिए डी-पैड का उपयोग करता हूं, केवल पूरी पंक्ति फोकस हो सकती है, मुझे सूचीदृश्य के अंदर छविदृश्य नहीं मिल सकता है।

मैं एंड्रॉइड जोड़ने की कोशिश करता हूं: फोकस करने योग्य = "सत्य" छविदृश्य में, लेकिन इसका कारण यह है कि संपूर्ण सूचीदृश्य ItemClick ईवेंट पर प्राप्त नहीं हो सकता है।

क्या कोई जानता है कि सूची-पंक्तियों के बीच फोकस कैसे स्थानांतरित करें और डी-पैड का उपयोग करके सूचीदृश्य के अंदर आइटम भी सूचीदृश्य और छविदृश्य क्लिक करने योग्य रहता है?

बहुत बहुत धन्यवाद!

उत्तर

2

मुझे डी-पैड के साथ मेरा लिस्टव्यू काम मिला जो एक सूची आइटम के अंदर फोकस स्विच कर सकता है। इस तरह मैं इसे हल करता हूं। सबसे पहले, अपनी सूची दृश्य आइटम को ध्यान देने योग्य है।

नोट: यदि आप अपने कोड में बाद में गलत करने के लिए ItemsCanFocus सेट करने का प्रयास करते हैं, तो आपकी अपनी सूची आइटम अब और ध्यान केंद्रित नहीं कर सकते हैं यहां तक ​​कि अपने सेट वापस सही करने के लिए फिर से करता है, तो मिल जाएगा, ताकि ऐसा नहीं करते हैं।

mDpadListView.setItemsCanFocus(true); 

फिर आपको यह ट्रैक रखने के लिए एक फ़ील्ड चाहिए कि कौन सी सूची आइटम वर्तमान में चुना गया है। यहां मैंने व्यूहोल्डर को सूची में इटैम का टैग एडाप्टर में रखा है।

mDpadListView.setOnItemSelectedListener(new OnItemSelectedListener() { 
    @Override 
    public void onItemSelected(AdapterView<?> parent, View view, 
      int position, long id) { 
     if (view.getTag() != null) { 
      DpadListAdapter.ViewHolder holder = (ViewHolder) view.getTag(); 
      if (holder.shortCut != null && holder.shortCut.isShown()) { 
       currentSelectView = view; 
      } else { 
       currentSelectView = null; 
      } 
     } else { 
      currentSelectView = null; 
     } 
    } 

    @Override 
    public void onNothingSelected(AdapterView<?> parent) { 
    } 
}); 

तीसरा,() OnKeyDown ओवरराइड गतिविधि विधि में ऊपर और नीचे नियंत्रित करने के लिए, छोड़ दिया, डी-पैड के लिए सही कुंजी।

जब उपयोगकर्ता डी-पैड पर दायां बटन दबाता है, तो मैंने सूची दृश्य को Foucs() को साफ़ करने और फोकस प्राप्त करने के लिए ImageView को अंदर जाने दिया।

जब उपयोगकर्ता दबाए, नीचे या बाएं, सूची आइटम में ImageView इसे फोकस कर देगा और सूची दृश्य फिर से प्राप्त करें देखें।

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    switch (keyCode) { 
    case KeyEvent.KEYCODE_DPAD_RIGHT: 
     if (currentSelectView != null) { 
      DpadListAdapter.ViewHolder holder = 
       (ViewHolder)  currentSelectView.getTag(); 
      mDpadListView.clearFocus(); 
      holder.shortCut.setFocusable(true); 
      holder.shortCut.requestFocus(); 
      return true; 
     } 
     break; 
    case KeyEvent.KEYCODE_DPAD_LEFT: 
    case KeyEvent.KEYCODE_DPAD_UP: 
    case KeyEvent.KEYCODE_DPAD_DOWN: 
     if (currentSelectView != null) { 
      DpadListAdapter.ViewHolder holder = 
        (ViewHolder) currentSelectView.getTag(); 
      if (holder.shortCut.hasFocus()) { 
       holder.shortCut.clearFocus(); 
       holder.shortCut.setFocusable(false); 
       mDpadView.requestFocus(); 
       return true; 
      } 
     } 
     break; 
    default: 
     break; 
    } 
    return super.onKeyDown(keyCode, event); 
} 
+0

हाय, मुझे मदद चाहिए, मैं जानना चाहता हूं कि अगर मैं डी-पैड के साथ एक आइटम का चयन करता हूं, तो पृष्ठभूमि रंग बदलता है। – wdyz

+0

आपको अपने आइटम की पृष्ठभूमि छवि पर खींचने वाली एक राज्य सूची का उपयोग करने की आवश्यकता है, एंड्रॉइड दें: state_focused = "true" सामान्य स्थिति से एक अलग छवि। रेफरी: http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList – henry74918

+0

हाय, वर्तमान चयन क्या है – Andrain

0

आप अपने लेआउट फ़ाइल में नीचे के रूप में डी-पैड का उपयोग करने के गुणों का उपयोग कर सकते हैं:

 android:nextFocusLeft="@+id/abc" 
     android:nextFocusRight="@+id/xyz" 
     android:nextFocusUp="@+id/pqr" 
     android:nextFocusDown="@+id/mno" 
     android:nextFocusForward="@+id/finish" 

यह सभी गुण गूगल टीवी में डी-पैड का उपयोग करने की तुम्हारी मदद करेगा ।

+0

सूचीदृश्य और सूचीदृश्य की सामग्री एक ही एक्सएमएल में नहीं हैं, तो मैं कैसे ध्यान केंद्रित (एक imageView या TextView तरह) सूचीदृश्य की सामग्री में सूचीदृश्य से ही स्थानांतरित करने के लिए पता नहीं है। – henry74918

6

आप अपने ListView निम्नलिखित सेट करने के लिए:

listView.setItemsCanFocus(true); 
अपने ListItems के अंदर है कि फ़ोकस करने योग्य दृश्यों के साथ

नजरअंदाज नहीं किया जा जाएगा।

+0

यह नहीं पता कि मैंने दस्तावेज़ों में से एक को कैसे नहीं देखा, लेकिन यह बहुत अच्छा काम करता है।मेरे मामले में मुझे केवल एक ही चीज है जो getVerticalFadingEdgeLength को ओवरराइड करना है, जबकि यादृच्छिक वापसी 42 लगता है कि यह व्यवहार करने के लिए मिलता है। यह फोकस करने के लिए हमेशा अगली पंक्ति डाउन/अप उपलब्ध होने के लिए सूची दृश्य को चालित करता है। अन्यथा यदि स्क्रीन की शीर्ष/निचले हिस्से के साथ आखिरी पंक्ति रेखाएं ठीक हो जाती हैं तो फोकस फंस जाता है। – user2399268

संबंधित मुद्दे