CheckedTextView's -androidのリストで特定の行にプログラム的にアクセスする

StackOverflow https://stackoverflow.com/questions/3556764

質問

CheckedTextViewsのリストに特定の行にプログラム的にアクセスして、テキストボックスの状態を変更することは可能ですか?

私のプログラムには、ユーザーが押して状態を切り替えることができるいくつかのCheckedTextViewがあるListViewがあります。

ユーザーがアクティビティを離れたときにチェックボックスの状態を保存したいので、私は私の途方の方法にあります:

public void onPause(){
         super.onPause();
         SparseBooleanArray positions;
         positions = listView.getCheckedItemPositions();
         ListAdapter items = listView.getAdapter();
         int j = items.getCount();

         ArrayList<Long> ids = new ArrayList<Long>();
         for (int k =0; k < j;k++){
             if(positions.get(k)==true){
                 ids.add(items.getItemId(k));   
             }
         } 
         this.application.getServicesHelper().open();
         this.application.getServicesHelper().storeServices(ids,visit_id);
         this.application.getServicesHelper().close();
     }

これは、リストビューを非常に単純に繰り返し、チェックされたアイテムをArrayListに追加してから、そのIDのリストをデータベースに保存します。

私の問題は、ユーザーがそのアクティビティに戻った後、リストをリセットしようとする際の問題があります。

これまでのところ、Startメソッドでは、データベースからチェックされたアイテムを思い出しますが、ListView要素に返されるIDを行進する方法はわかりません。次のようなことをすることはできますか:

listView.getElementById(id_from_database).setChecked?

私はgetelementbyidを使用できないことを知っていますが、私が意味することを示すためにここにあります

前もって感謝します

ケビン

役に立ちましたか?

解決 2

これは、IVEが最終的にやったことです。しかし、それは完全なハックのようです。基本的に、ループ用のダブルをセットアップする必要があります。リスト要素を繰り返し、1つはチェックリストの状態を取得したカーソルを繰り返します(状態が最後になったときにチェックされた要素のIDの単純な配列節約)

私の外側は、チェックされて設定するIDのリストを介して各IDをループに対してチェックするリスト要素を介して反復します。それらが互いに等しい場合、そのアイテムをチェックされたとおりに設定します。

    // mAdapter is contains the list of elements I want to display in my list. 
ServiceList.this.setListAdapter(mAdapter);

        // Getting a list of element Ids that had been previously checked by the user. getState is a function I have defined in my ServicesAdapter file.

    Cursor state = ServiceList.this.application.getServicesHelper().getState(visit_id);
    int checks = state.getCount();
    int check_service;               
    int c = mAdapter.getCount();
    if(checks>0){
        state.moveToFirst(); 
        for (int i=0; i<checks; i++) { 
            // set check_service = the next id to be checked
            check_service = state.getInt(0);
            for(int p=0;p<c;p++){

                if(mAdapter.getItemId(p)==check_service){
                        // we have found an id that needs to be checked. 'p' corresponds to its position in my listView
                    listView.setItemChecked(p,true);
                    break;
                }
            }
            state.moveToNext(); 
        } 
    }
    ServiceList.this.application.getServicesHelper().close();

これを達成するためのより効率的な方法があると教えてください!!

ありがとう

ケビン

他のヒント

あなたは電話することができます

listView.setItemChecked(int position, boolean value)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top