2012-02-16 65 views
0

在我的Android應用程序的一部分,我有一個ListView顯示錶中的條目列表。當用戶點擊ListView項目時,會顯示此項目的新IntentListView與自定義CursorAdapter不能很好地工作

在新的意向用戶可以在此項目做一些操作如閱讀編輯加入最愛(和unfavoriting當項目已收藏)。在詳細意圖變更在其表中的條目的「標記」欄中當它是收藏並當unfavorited

它工作正常。但問題出在我的主人ListView。我爲我的ListView設置了一個自定義CursorAdapter。我想添加ImageView,表明天氣條目是收藏或不。在我的ListView項目的佈局文件中,我爲此添加了一個ImageView並將其visibility設置爲GONE

我想檢測收藏項目並將其明星ImageViewvisibility設置爲VISIBLE。然後我在我的設備中運行應用程序。像往常一樣,沒有任何條目是受歡迎的。然後點擊ListView中的第一個項目,打開該項目的詳細信息頁面。我收藏它,並回到名單。好吧,現在第一個項目上有一個星形圖標,但不僅在這個上,還有其他一些項目。這些錯誤加星標項目的詳細信息頁面表示它不是收藏。所以問題不在於我的數據庫操作。我也檢查顯示標記項目的光標,其.getCount()也表示只有項目收藏。我找不到問題所在。我寫我的簡化源代碼定製CursorAdapter波紋管:

public class HereIsMyAdapter extends CursorAdapter { 

    private final LayoutInflater mInflater; 

    public HereIsMyAdapter(Context context, Cursor cursor) { 
     super(context, cursor, true); 
     mInflater = LayoutInflater.from(context); 
    } 

    @Override 
    public void bindView(View view, Context context, Cursor cursor) { 
     TextView txtTestText = (TextView) view.findViewById(R.id.txtTestText); 
     ImageView imgMark = (ImageView) view.findViewById(R.id.imgMark); 

     txtSureAz.setText(cursor.getString(cursor.getColumnIndex("azname"))); 

     boolean isMarked = cursor.getInt(cursor.getColumnIndex("marked")) == 1 ? true : false; 

     if (isMarked) { 
      imgMark.setVisibility(0); 
     } 

    } 

    @Override 
    public View newView(Context context, Cursor cursor, ViewGroup parent) { 
     View view = mInflater.inflate(R.layout.my_list_item, parent, false); 
     bindView(view, context, cursor); 
     return view; 
    } 

} 

回答

1

你嘗試過的東西怎麼樣?

boolean isMarked = cursor.getInt(cursor.getColumnIndex("marked")) == 1; 
if (isMarked) { 
    imgMark.setVisibility(View.VISIBLE); 
}else{ 
    imgMark.setVisibility(View.GONE); 
} 
+0

好主意,但沒有工作:(仍有不希望的痕跡。而在不同的項目時重新開啓應用程式 – 2012-02-16 18:40:36

+0

很抱歉,但我才意識到,爲什麼你在NewView的方法調用bindView() ? – juanmhidalgo 2012-02-16 18:45:52

+0

我在一個自定義的CursorAdapter教程中看到它後,我在調用這個方法的時候調用了這個方法,但是結果和我一樣,即使我刪除了這一行 – 2012-02-16 18:52:03

相關問題