1

Каждая строка моего списка в android имеет флажок и текстовое представление. Если я нажму на флажок, я установил свой флажок, но как установить флажок, если я нажму на TextView. Вот мой пример кода. Благодарим вас за ваше время.CheckBox и TextView в ArrayAdapter в Android

public class PitanjaAdapter extends ArrayAdapter<Odgovor>{ 

private ArrayList<Odgovor> odgovorList; 
Context context; 
private Typeface custom_font; 

public PitanjaAdapter(Context context, int textViewResourceId, ArrayList<Odgovor> odgovorList) { 
    super(context, textViewResourceId, odgovorList); 
    this.context = context; 
    this.odgovorList = new ArrayList<Odgovor>(); 
    this.odgovorList.addAll(odgovorList); 
    this.custom_font = Typeface.createFromAsset(context.getAssets(), "fonts/Aller.ttf"); 
} 

@SuppressLint("InflateParams") 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    ViewHolder holder = null; 
    if (convertView == null){ 
     LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = vi.inflate(R.layout.pitanja_entry, null); 

     holder = new ViewHolder(); 
     holder.code = (TextView) convertView.findViewById(R.id.code); 
     holder.code.setTypeface(custom_font); 
     holder.name = (CheckBox) convertView.findViewById(R.id.checkBox1); 
     convertView.setTag(holder); 

     holder.name.setOnClickListener(new View.OnClickListener(){ 

      @Override 
      public void onClick(View v) { 

       CheckBox cb = (CheckBox) v; 
       Odgovor country = (Odgovor) cb.getTag(); 
       country.setSelected(cb.isChecked()); 

      } 



     }); 
     holder.code.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 


      } 
     }); 

    } 
    else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 
    Odgovor country = odgovorList.get(position); 
    holder.code.setText(country.getContents()); 
    holder.name.setChecked(country.isSelected()); 
    holder.name.setTag(country); 
    if (odgovorList.get(position).getGreen() != 0 && odgovorList.get(position).getRed() != 0){ 
     if (country.isSelected() && Integer.parseInt(country.getIs_correct()) == 1){ 
      holder.code.setBackgroundResource(R.drawable.tocan_odgovor_drawable); 
      holder.name.setBackgroundResource(R.drawable.ikona_box2_tocno); 
     } else if (country.isSelected() && Integer.parseInt(country.getIs_correct()) == 0){ 
      holder.code.setBackgroundResource(R.drawable.netocan_odgovor_drawable); 
      holder.name.setBackgroundResource(R.drawable.ikona_box2_netocno); 
     } else if (!country.isSelected() && Integer.parseInt(country.getIs_correct()) == 0){ 
      holder.code.setBackgroundResource(R.drawable.netocan_odgovor_drawable); 
      holder.name.setBackgroundResource(R.drawable.selector_check); 
      holder.name.setEnabled(false); 
     } else if (!country.isSelected() && Integer.parseInt(country.getIs_correct()) == 1){ 
      holder.code.setBackgroundResource(R.drawable.tocan_odgovor_drawable); 
      holder.name.setBackgroundResource(R.drawable.selector_check); 
      holder.name.setEnabled(false); 
     } 
    } 


    return convertView; 
} 

public void colorized(Odgovor odgovor){ 
    odgovor.setRed(Color.RED); 
    odgovor.setGreen(Color.WHITE); 
} 

private class ViewHolder{ 

    public TextView code; 
    public CheckBox name; 


} 

}

ответ

1

Я положил его здесь becouse я не могу комментировать :(. Hace вы пытались с

checkbox.setChecked(myboolean) 

EDIT

Вы должны поместить его

public class PitanjaAdapter extends ArrayAdapter<Odgovor>{ public ViewHolder holder;

А потом

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

if (convertView == null){ 
    LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    convertView = vi.inflate(R.layout.pitanja_entry, null); 

    holder = new ViewHolder(); 
    holder.code = (TextView) convertView.findViewById(R.id.code); 
    holder.code.setTypeface(custom_font); 
    holder.name = (CheckBox) convertView.findViewById(R.id.checkBox1); 
    convertView.setTag(holder); 

    holder.name.setOnClickListener(new View.OnClickListener(){ 

     @Override 
     public void onClick(View v) { 

      CheckBox cb = (CheckBox) v; 
      Odgovor country = (Odgovor) cb.getTag(); 
      country.setSelected(cb.isChecked()); 

     } 

Таким образом, вы даете ему значение внутри GetView но вы можете Acces к нему из OnClick потому что это внешнее значение. Но всегда убедитесь, что дать ему значение где-то прежде, чем использовать его, или это будет нулевым

Чтобы использовать TextView как днище вы должны использовать onclicklistener

public class MainActivity extends ActionBarActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    TextView text= (TextView) findViewById(R.id.textView); 
    text.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      CheckBox A = (CheckBox) findViewById(R.id.checkBox2); 
      A.setChecked(!A.isChecked()); 
     } 
    }); 
} 
+0

I судимым для реализации Methond setOnClickListener, и проверьте, флажок установлен, установите checbox на false, но тогда мне нужно изменить модификатор ViewHolder на final, и если я изменю модификатор ViewHolder, я не смогу его выполнить. –

+0

Большое спасибо, но почему мой набор приложений всегда проверял последний флажок. Я реализовать на этом пути 'holder.code.setOnClickListener (новый View.OnClickListener() { \t \t \t \t \t \t @Override \t \t \t общественного недействительными OnClick (View v) { \t \t \t \t \t \t \t \t if (v.isSelected()) { \t \t \t \t \t владелец.name.se tChecked (истина); \t \t \t \t} еще { \t \t \t \t \t holder.name.setChecked (ложь); \t \t \t \t} \t \t \t \t \t \t \t} \t \t}); ' –

+0

могли бы вы объяснить это по-другому ?, я не понимаю вопрос, в чем проблема? –

Смежные вопросы