2011-07-26 5 views
0

私はクエリの結果を示すリストを持つリストアクティビティを持っています。さて、私は各項目をクリックすることができるようにしたい、そして項目は色を変えますが、機能しません。 「accepte」ボタンが押されるか、もう一度項目が押されるまで、項目を選択状態にしておきたい。私はそれがテキストボックスがどのように機能するのか知っていますが、自分のやり方でやりたいと思っています。リストビューとリストアダプターはアンドロイドで色を変更します

public void createList() { 

    if (ok == 1) { 
    //hay muachas possibilidades 
    if (sol.get(i).getMultiseleccion() != 0){ 

     bt2.setVisibility(View.INVISIBLE); 
    }else { 
     //solo se clika en una 
     //lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
     bt2.setVisibility(View.VISIBLE); 
    } 

     String hd1 = sol.get(i).getDescSolicitud(); 

     tv2.setText(hd1); 

     ArrayList<SubSolicitud> sub = sol.get(i).getSubSol(); 
     mAdapter = new EventAdapter(this, sub); 
     setListAdapter(mAdapter); 
     lv.setTextFilterEnabled(true); 
     lv.computeScroll(); 
     lv.setDividerHeight(1); 
     lv.setItemsCanFocus(false); 
     lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
     lv.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, 
        int position, long arg3) { 

        ok = 1; 
        //OnListClick(position, arg1); 
        if (sol.get(i).getMultiseleccion() != 0) { 
         // multiples respuestas 

           ((EventEntryView)arg1).text1.setTextColor(Color.YELLOW); 

         guardarRespuesta(); 
        }else { 
        buscarElementos(); 
        } 

      } 

     }); 
    } 

    // informar el usuario de que hay un error 
    else 
     buildAlertDialog(); 

} 

およびその他のクラスは次のとおりです:あなたは、私は黄色のテキストを取得しようが、それを見ることができるように パブリッククラスEventAdapterがBaseAdapter {

public ArrayList<SubSolicitud> mEvents = null; 

    public EventAdapter(Context c, ArrayList<SubSolicitud> subsol) { 
     mContext = c; 
     mEvents = subsol; 
    } 

    public int getCount() { 
     return mEvents.size(); 
    } 

    public Object getItem(int position) { 
     return position; 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     EventEntryView btv; 
     if (convertView == null) { 
      btv = new EventEntryView(mContext, mEvents.get(position)); 

     } else { 
      btv = (EventEntryView) convertView; 
      String title1 = mEvents.get(position).getDescripcion(); 

      if (title1 != null) { 
       btv.setText1Title(title1); 
      } 

     } 
     btv.setBackgroundColor(Color.BLACK); 

     return btv; 

    } 

    private Context mContext; 

    public void clearEvents() { 
     mEvents.clear(); 
     notifyDataSetChanged(); 
    } 

    public void addEvent(SubSolicitud e) { 
     mEvents.add(e); 

    } 

} 

public class EventEntryView extends LinearLayout { 

    // private View inflatedView; 
    private TextView text1; 

    // private TextView text2; 

    public EventEntryView(Context context, SubSolicitud subSolicitud) { 
     super(context); 
     this.setOrientation(VERTICAL); 



     text1=new TextView(context); 
     text1.setTextSize(20); 
     text1.setPadding(10, 10, 10, 10); 
     text1.setTextColor(Color.WHITE); 
     String t = subSolicitud.getDescripcion(); 
     text1.setText(t); 

     addView(text1, new LinearLayout.LayoutParams(
       LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 

    } 

    public void setText1Title(String title1) { 
     // TODO Auto-generated method stub 
     text1.setText(title1); 

    } 

} 

を拡張ここ

は私のコードですクリックしても黄色くならない

解決策はありますか?

ありがとう

+0

この質問はここで答えられました:http://stackoverflow.com/questions/6731167/change-list-background-problem/6731304#6731304 –

+0

ありがとう、しかし、それは私が欲しいものではありません。彼は別の活動に行くつもりですが、私は彼がandroid:choiceMode = "singleChoice"を持っているとプラスではありませんが、いくつかの項目を選択することはできません。 – vallllll

答えて

2

リスト内の各アイテムにEventEntryViewがないため、機能しません。EventEntryViewは、それぞれをレンダリングするために再利用されます。

SubSolicitudモデルオブジェクトに何かを追加して、モデルオブジェクトが選択されたことを示す必要があります(ブール値「選択」プロパティとしましょう)。

public void onItemClick(AdapterView<?> adapterView, View view, 
       int position, long id) { 
    // ... 
    SubSolicitud selectedSubSol = (SubSolicitud)adapterView.getAdapter().getItem(id); 
    boolean currentValue = selectedSubSol.isSelected(); 
    selectedSubSol.setSelected(!currentValue); // toggle 'selected' on and off 
    // ... 
} 

(あなたはまた、仕事に、このためmEvents.get(position)を返すようにEventAdaptergetItem方法を修正する必要があります...)

その後、あなたのEventAdapterで - あなたは、このプロパティを切り替えるでしょう、あなたのonItemClickedハンドラで

getViewメソッドでは、 "selected"プロパティの値を使用してテキストの色をレンダリングします -

public View getView(int position, View convertView, ViewGroup parent) { 
    // ... 
    if (mEvents.get(position).isSelected()) { 
     btv.text1.setTextColor(Color.YELLOW); 
    } else { 
     // you have to have an else to set it back to the default 
     // color, because the view is reused for all list items. 
     btv.text1.setTextColor(Color.WHITE); 
    } 
    // ... 
} 
+0

あなたはちょうど私の一日を保存したたくさんのthaksこのメソッドは素晴らしい作品プラス私が持っていた別の問題を解決! – vallllll

0

これは色を変更する方法です。

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

         position = position - listView.getFirstVisibleItem(); 
         ((EditText)arg0.getChildAt(position).findViewById(R.id.myTextView)).setTextColor(Color.YELLOW); 

    } 

しかし、あなたは色から項目を解放したい場合は、リストビューの各項目を反復処理し、正常に戻ってそれを変更するか、アクションがあるたびに呼び出されているので、あなたがgetView()内でそれを行うことができなければなりませんリストビューで

関連する問題