2015-03-14 5 views
1

У меня есть два списка, строки имеют простой флажок и TextView, когда я нажимаю на флажок в списке1, я перемещаю элемент в List2 и хочу показать его флажок как выбранный. Несмотря на то, что я жестко кодируется checkbox.setSelected (true) в адаптере List2, но флажок, похоже, не показывает галочку. Вот код, какие-то идеи?Установить CheckBox в ListView Android

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="horizontal" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:padding="7dp" 
> 
<CheckBox 
    android:id="@+id/checkbox1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    /> 
<TextView 
    android:id="@+id/item_title" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:gravity="center_vertical" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentBottom="true" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:textSize="14dp" 
    android:textStyle="normal" 
    android:layout_marginRight="25dp" 
    android:layout_marginTop="5dp" 
    android:layout_marginBottom="5dp"/> 
</LinearLayout> 

    public class AlphabetListDemo extends Activity { 

//String of alphabets // 
List<ListItem> alphabets = new ArrayList<ListItem>(); 
List<ListItem> prods = new ArrayList<ListItem>(); 

ListView L1, L2; 
myAdapter myadp; 
myAdapter2 myadp2; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_alphabet_list_demo); 

    L1 = (ListView)findViewById(R.id.list1); 
    L2 = (ListView)findViewById(R.id.list2); 

    myadp = new myAdapter(this,alphabets); 
    myadp2 = new myAdapter2(this,prods); 
    L1.setAdapter(myadp); 
    L2.setAdapter(myadp2); 

    L1.setOnItemClickListener(new AdapterView.OnItemClickListener(){ 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) { 
      //add to Other List & update 
      prods.add(alphabets.get(arg2)); 
      L2.setAdapter(myadp2); 

      //remove from current List & update 
      alphabets.remove(arg2); 
      L1.setAdapter(myadp); 
     } 
    }); 

    L2.setOnItemClickListener(new AdapterView.OnItemClickListener(){ 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) { 
      //add to Other List & update 
      alphabets.add(prods.get(arg2)); 
      L1.setAdapter(myadp); 

      //remove from current List & update 
      prods.remove(arg2); 
      L2.setAdapter(myadp2); 
     } 
    }); 

    final EditText textField = (EditText) findViewById(R.id.editText); 
    Button addBtn = (Button) findViewById(R.id.addBtn); 
    addBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      if(textField.getText().length()>0){ 
       alphabets.add(new ListItem(textField.getText().toString(),false)); 
       L1.setAdapter(myadp); 
      } 
     } 
    }); 

} 


class myAdapter extends ArrayAdapter<ListItem> 
{ 
    TextView label; 
    CheckBox checkBox; 
    View row; 
    public myAdapter(Context context,List<ListItem>list) 
    { 
     super(context, android.R.layout.simple_list_item_1, list); 
    } 

    public View getView(final int position, View convertView, ViewGroup parent) 
    { 
     try{ 
      LayoutInflater inflater=getLayoutInflater(); 
      row = inflater.inflate(R.layout.simple_list_item_1, parent, false); 
      label = (TextView)row.findViewById(R.id.item_title); 
      checkBox= (CheckBox)row.findViewById(R.id.checkbox1); 
      label.setText(alphabets.get(position).description); 
      label.setTextColor(Color.BLACK); 
      checkBox.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        prods.add(alphabets.get(position)); 
        L2.setAdapter(myadp2); 

        //remove from current List & update 
        alphabets.remove(position); 
        L1.setAdapter(myadp); 
       } 
      }); 

     }catch(Exception e){ 

     } 
     return row; 
    } 
} 
// adapter for second list..... 
class myAdapter2 extends ArrayAdapter<ListItem> 
{ 
    TextView label; 
    CheckBox checkBox; 
    View row; 
    public myAdapter2(Context context,List<ListItem>list) 
    { 
     super(context, android.R.layout.simple_list_item_1, list); 
    } 

    public View getView(final int position, View convertView, ViewGroup parent) 
    { 
     try{ 
      LayoutInflater inflater=getLayoutInflater(); 
      row = inflater.inflate(R.layout.simple_list_item_1, parent, false); 
      label = (TextView)row.findViewById(R.id.item_title); 
      checkBox= (CheckBox)row.findViewById(R.id.checkbox1); 
      label.setText(prods.get(position).description); 
      label.setTextColor(Color.BLUE); 
      checkBox.setSelected(true); 

      checkBox.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        //add to Other List & update 
        alphabets.add(prods.get(position)); 
        L1.setAdapter(myadp); 

        //remove from current List & update 
        prods.remove(position); 
        L2.setAdapter(myadp2); 
       } 
      }); 
     }catch(Exception e){ 

     } 
     return row; 
    } 
} 

class ListItem{ 
    public boolean isSelected; 
    public String description; 

    ListItem(String description, boolean isSelected){ 
     this.description = description; 
     this.isSelected=isSelected; 
    } 
} 
+0

, что ваш средний о **, но не работают **? –

+0

Флажок не выбран, флажок – user1529412

ответ

0

Вы должны сделать свой CheckBox быть:

android:focusable="false" 
android:focusableInTouchMode="false" 

в противном случае существует конфликт между CheckBox щелчком и ListView item click.

Вот хороший пример для деталей, чтобы сделать Android ListView Checkbox Example - OnItemClickListener() and OnClickListener()

+0

Да, но это не мой вопрос. – user1529412