2015-05-12 42 views
2

我的ListView在小屏幕設備上出現問題,當我們點擊列表中的第一項,然後滾動到最後,我們看到最後選擇的項目第一項的顏色。我的適配器代碼Android的列表視圖在小屏幕設備上選擇的第一個和最後一個項目

部分:

public static class ViewHolder { 
    TextView mItemTitleView; 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 

    viewHolder = new ViewHolder(); 
    if (convertView == null) { 
     convertView = mInflater.inflate(this.mLayoutId, parent, false); 

     viewHolder.mItemTitleView = (TextView) convertView.findViewById(R.id.itemtitle); 

     convertView.setTag(viewHolder); 
    } else { 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 

    Typeface futura_font = Typeface.createFromAsset(getContext().getAssets(), "fonts/Futura.ttf"); 
    viewHolder.mRadioNameView.setTypeface(futura_font); 

    viewHolder.mItemTitleView.setText("Something"); 

    return convertView; 
} 

設備測試:三星Galaxy S2在Android 2.3.7。

截圖:

+1

什麼單擊該項目時,你怎麼辦?張貼代碼太 –

+0

你的點擊事件在哪裏?同時初始化你的'ViewHolder'對象'if(convertView == null){'condition。 – Piyush

+1

你用什麼方法顯示項目 – Aayushi

回答

1

一週前我有這個確切的問題。 用於突出顯示項目的代碼必須位於getView函數中,而不是其外部,因爲每次滾動時都會調用getView。

添加它,像這樣:

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 

    viewHolder = new ViewHolder(); 
    if (convertView == null) { 
     convertView = mInflater.inflate(this.mLayoutId, parent, false); 

     viewHolder.mItemTitleView = (TextView) convertView.findViewById(R.id.itemtitle); 

     convertView.setTag(viewHolder); 
    } else { 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 

    Typeface futura_font = Typeface.createFromAsset(getContext().getAssets(), "fonts/Futura.ttf"); 
    viewHolder.mRadioNameView.setTypeface(futura_font); 

    viewHolder.mItemTitleView.setText("Something"); 
    if(getItemAtPosition(position).isHighlighted){ 
     //add hightlighting to item like you did outside of getView 
     //in your app, highlighting an item makes its text red 
     //so you should put the code that makes the text red here 
    } 
    return convertView; 
} 

如果爲每個項目保存一個布爾變量亮顯,這將正常工作。

添加後,getView不會錯誤地將突出顯示添加到最後一項。

+0

「getItemAtPosition(position).isHighlighted」的選擇不是確切的語法,但我希望你明白了 –

1

我曾面臨同樣的,你可以創建res文件夾的動畫文件夾,請參見下面 代碼創建一個文件名說, bg_press.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_pressed="true" 
android:drawable="@drawable/bg_press_default" /> <!-- pressed --> 
<item android:state_focused="true" 
android:drawable="@drawable/bg_item_list" /> <!-- focused --> 
<item android:drawable="@drawable/bg_item" /> <!-- default --> 
</selector> 

注意:您還可以使用顏色圖像的位置作爲背景在這個文件中。

在你行的xml用這個作爲,

android:background="bg_press" 

希望這將幫助你

相關問題