2013-09-24 52 views
0

所以我有一個包含CheckBox以及一個TextView當我點擊CheckBox我希望它劃掉TextView我的代碼適用於最上面的項目列表上的自定義ListView但如果我點擊一個CheckBox對列表的底部它仍然穿越了頂部TextView我在xml中使用onClick方法我知道它不是ListView的規範它只是我不知道如何處理兩個不同的xml元素帶有onListItemClickListView和的OnClick不會影響目標項目

public void verify(View view) 
    { 
     CheckBox cb = (CheckBox) findViewById(R.id.checkBox1); 
     TextView t= (TextView) findViewById(R.id.label); 
     Toast.makeText(this, t.getText(), Toast.LENGTH_SHORT).show(); 

     t.setPaintFlags(t.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); 
    } 



<?xml version="1.0" encoding="utf-8"?> 

<CheckBox 
    android:id="@+id/checkBox1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:onClick="verify" 
    /> 

<TextView 
    android:id="@+id/label" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="tasks" 
    android:textSize="30px" > 
</TextView> 

public class MobileArrayAdapter extends ArrayAdapter<String> { 
    private final Context context; 
    private final String[] values; 

    public MobileArrayAdapter(Context context, String[] values) { 
     super(context, R.layout.activity_task_list, values); 
     this.context = context; 
     this.values = values; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     View rowView = inflater.inflate(R.layout.activity_task_list, parent, false); 
     TextView textView = (TextView) rowView.findViewById(R.id.label); 
     textView.setText(values[position]); 


     return rowView; 
    } 

} 

回答

0

當使用的onClick的XML功能,OnClick方法纔會被調用該特定視圖。也就是說,編譯時生成onClick回調的代碼將不會知道您在運行時會生成更多與您希望處理的相同View的點擊回調。這或多或少是爲什麼只有第一個TextView是虛線的原因,因爲它與第一個生成的CheckBox綁定,唯一的CheckBox接收回調。

,如果你改變你的代碼會發生什麼:

public class MobileArrayAdapter extends ArrayAdapter<String> { 
private final Context context; 
private final String[] values; 

public MobileArrayAdapter(Context context, String[] values) { 
    super(context, R.layout.activity_task_list, values); 
    this.context = context; 
    this.values = values; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    LayoutInflater inflater = (LayoutInflater) context 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    View rowView = inflater.inflate(R.layout.activity_task_list, parent, false); 
    TextView textView = (TextView) rowView.findViewById(R.id.label); 
    textView.setText(values[position]); 

    CheckBox cb = (CheckBox) rowView.findViewById(R.id.checkBox1); 
    cb.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      if (isChecked) { 
       textView.setPaintFlags(t.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); 
      } 
     } 
    }); 

    return rowView; 
} 

如果還是不行,那麼也許您應用適配器:

MobileArrayAdapter mobileArrayAdapter = new MobileArrayAdapter(this, 
      R.layout.activity_task_list,yourvalues); 

    list = (ListView) findViewById(R.id.yourlist); 

    list.setOnItemClickListener(new OnItemClickListener() { 

     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
       // fetch TextView from the view 
       textView.setPaintFlags(t.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); 
     } 
    }); 

上面似乎有工作:Custom ArrayAdapter onClick position & row highlight

+0

因此,無論按下什麼按鈕,都會穿出最後一個元素 –

+0

這也是一些進步...... – cYrixmorten

+0

正確但不是一個辦法 –

相關問題