2010-09-03 28 views
3

我的問題 - 我想TextView的文本我有一個自定義的ListView滾動滾動只有在ListView中選擇項目。當列表項失去焦點時,我希望選取框停止滾動。我知道我需要設置TextView爲啓用(setEnabled(true))滾動工作,但是當我這樣做時,因爲項目被添加,他們都滾動,這不是我想要的行爲(但它確實有意義爲什麼會這樣)。我嘗試使用ListView的Click處理程序以編程方式設置它們以將TextView設置爲啓用(setEnabled(true)),跟蹤私有變量中當前選定的項目,然後相反地將以前的視圖TextView啓用狀態設置爲false何時點擊新項目等等。我希望這是有道理的。下面是一些Java代碼,可能更好地說明它:安卓橢圓選框問題與當前選定的列表項目

private View tempListItemView = null; 

    if (this.tempListItemView != null) { 
     TextView tempTxtView = (TextView) tempListItemView.findViewById(R.id.txtArticleTitle); 
     tempTxtView.setSelected(false); 
     tempTxtView.setEllipsize(TruncateAt.END); 
    } 
    // Set marquee of currently selected list item 
    TextView tt = (TextView) v.findViewById(R.id.txtArticleTitle); 
    tt.setEllipsize(TruncateAt.MARQUEE); 
    tt.setSelected(true); 
    tempListItemView = v; 

這並不工作,排序的。但是,它有點笨重。例如,如果前一個項目離開顯示屏,它永遠不會關閉,當我選擇列表項目時,會丟失我設置的所有自定義listSelector屬性(請參見下文)。另外,我還有一些奇怪的行爲,滾動的TextView的背景變爲黑色(甚至整個ListView listSelector完全消失,當我在Droid上使用鍵盤時,但我只是試圖模擬這個功能,當列表項被按下時,我在網上沒有找到關於如何實現這個的很多東西,下面是片段和屏幕截圖:

我有一個ListActivity,綁定到一個自定義列表視圖中ArrayAdapter內容認爲,這一活動是聯繫在一起看起來像這樣:

<?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" 
> 
<ListView 
    android:id="@+id/android:list" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:listSelector="@drawable/list_selector" 
    /> 
</LinearLayout> 

的list_selector繪製這個樣子的:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_focused="true" android:drawable ="@drawable/maroon_list_select_bg" /> 
    <item android:drawable="@drawable/maroon_list_select_bg" /> 
</selector> 

它的Drawable是一個簡單的1x1栗色像素來繪製列表項目選擇的栗色背景顏色。爲了節省空間,我附上了自定義視圖的截圖:(我的第一篇文章,所以我不能:(

這裏是定義每個列表的自定義佈局的簡要片段(帶字幕的TextView)項...

  <TextView 
       android:id="@+id/txtArticleTitle" 
       android:textSize="16sp" 
       android:textStyle="bold" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textColor="@color/list_item" 
       android:singleLine="true" 
       android:ellipsize="end"> 
      </TextView> 
      <TextView 
       android:id="@+id/txtArticleSnippet" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textColor="@color/list_desc_copy" 
       > 
      </TextView> 
      <TextView 
       android:id="@+id/txtArticleVotes" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Votes: 1576" 
       android:textColor="@color/list_small_copy" 
       > 
      </TextView> 

請記住,我知道我需要設置的android:ellipsize以「跑馬燈」來獲得滾動,但如上所述,我以編程方式這樣做是爲了目前選擇的列表系列

有沒有人有這方面的解決方案?在此先感謝,我爲冗長的帖子道歉...只是想成爲thorou GH。再次感謝!

回答

0

您是否嘗試過使用自定義TextView :: New類並擴展TextView ::?然後覆蓋onTouchEvent(MotionEvent event)而你說的是它適用於你機器人上的鍵盤。這麼可能不是調用

super.onTouchEvent(MotionEvent event);

調用正確的關鍵

onKeyDown(int keyCode, KeyEvent event)

或這就夠了

onTrackballEvent(MotionEvent event) 

不要忘記改變XML

0

我「 m不知道你把那個setSelected(true)放在哪裏。

在我的情況下,我使用GridView(也應該適用於ListView)。我只是做這setOnItemClickListener:

gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 

      v.setSelected(true); 

      // FIXME - text not align in the background 
      Toast.makeText(getSherlockActivity() 
        , "click " + SHOWN_TRACKED_ITEMS.get(position).name, Toast.LENGTH_SHORT).show(); 
     } 
    }); 

好像而第二項點擊,第一個做字幕停止,第二個開始選取框。看起來它會自動取消選擇其他先前選擇的項目。

You can see it live here in gif file.