2014-01-28 102 views
1

我正在開發一個使用兩個片段的應用程序。其中一個片段使用ListView來顯示項目,點擊後,第二個片段會自行更新(這是一個字典應用程序)。 一旦在ListView中選擇了一個項目,我希望它被突出顯示。我通過在ListView項目的XML文件中使用以下屬性來實現此目的。ListView項保持突出顯示

android:choiceMode="singleChoice" 
android:listSelector="@android:color/darker_gray" 

這項工程罰款至於選擇的項目有關。但問題是,當我滾動列表時,即使所選項目不在列表中,選擇有時仍會保留在列表的底部或頂部(視情況而定)。這裏有截圖來解釋我的問題。

enter image description here

enter image description here

enter image description here

第一PIC不顯示選擇;在第二張照片中,我選擇了101,因此更新了第二個片段。在第三張圖片中,即使未顯示101,ListView的一部分也會突出顯示。

這是什麼問題?

謝謝。

編輯 這裏是OnItemClick()方法。

public void onItemClick(AdapterView<?> arg0, View view, int arg2, long arg3) { 

    String selectedWord = words.get(arg2); //words in an ArrayList which holds all the words displayed in this fragment. 

    Meaning meaningFragment = (Meaning) getSupportFragmentManager(). 
             findFragmentById(R.id.fragmentMeaning); 
    meaningFragment.searchMeaning(selectedWord); //this method updates the other fragment. 
} 

編輯:

這個問題尚未解決。如果有人想看看,我已經上傳了github這個項目。

+0

請問您能否提供onItemClick()方法。 – HpTerm

+0

您是否嘗試過查看eclipse提供的示例。有一個左窗格更新右窗格細節的主細節示例,它可以正常工作。 – HpTerm

+0

向我們展示您的getView方法 –

回答

1

在Eclipse中,您可以創建主 - 細節流程,這是您正在嘗試執行的示例。

爲此創建一個「新的Android應用程序」,並在第三或第四個屏幕中稱爲「創建活動」,向您提供三種可能性,選擇一個名爲「主/細節」的屏幕。

這不能爲您的問題提供答案,而只是指出您可以從中進行闡述的工作示例。

現在要回答你的問題,我查看了你的代碼,發現了錯誤。

以下是onCreateView()的工作代碼。我註釋掉了錯誤的代碼行。

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    View v = inflater.inflate(R.layout.fragment_one, container); 

    listView = (ListView) v.findViewById(R.id.listView); 
    listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 

    //listView.setAdapter(new ArrayAdapter<String>(getActivity(), 
    //   android.R.layout.simple_dropdown_item_1line, array)); 
    //listView.setSelector(android.R.color.holo_blue_dark); 

    listView.setAdapter(new ArrayAdapter<String>(getActivity(), 
       android.R.layout.simple_list_item_activated_1, array)); 

    listView.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int position, 
       long arg3) { 
      listView.setItemChecked(position, true); 
      FragmentTwo frag = (FragmentTwo) getActivity() 
              .getFragmentManager() 
              .findFragmentById(R.id.fragmentTwo); 
      frag.updateTextView(array[position]); 
     } 
    }); 

    return v; 
} 

在你的代碼2條以下的線接錯

listView.setAdapter(new ArrayAdapter<String>(getActivity(), 
     android.R.layout.simple_dropdown_item_1line, array)); 
listView.setSelector(android.R.color.holo_blue_dark); 

你在這裏做什麼設置simple_dropdown_item_1line這是不是你想要的,你手動設置selector。您必須使用simple_list_item_activated_1而不是手動設置選擇器。

listView.setAdapter(new ArrayAdapter<String>(getActivity(), 
     android.R.layout.simple_list_item_activated_1, array)); 
//listView.setSelector(android.R.color.holo_blue_dark); 

如果你想自定義選擇的顏色,你可以通過複製simple_list_item_activated_1並編輯您的需求,並調用編輯的佈局創建自定義選擇。 但是,我建議使用默認顏色,以便Android決定更改其配色方案的日期,以符合新的配色方案。

總之,要使ListView.CHOICE_MODE_SINGLE正常工作,您必須使用simple_list_item_activated_1而不是手動設置selector

+1

工作。謝謝。 – Rajat

+0

這很酷;-) – HpTerm