我是一個android新手..我正在使用遊標適配器和有一個切換按鈕和一個textview的列表視圖...當我點擊切換按鈕,我需要獲得click事件,並在列表中的項目的位置..使用cursorAdapter獲取列表視圖中的按鈕點擊項目位置
我看到很多線程,但我不覺得這對我的作品的完美解決方案...
最後我決定設置的位置bindview並嘗試檢索它點擊事件..但是當我在click事件中訪問holder.position時,我得到空指針異常。
請幫我這個傢伙。非常感謝
public class CalendarListAdapter extends CursorAdapter implements OnClickListener{
protected static class RowViewHolder {
public TextView mTitle;
public ToggleButton mButton;
public int position;
}
protected ListView calListView;
@SuppressWarnings("deprecation")
public CalendarListAdapter(Context context, Cursor c) {
super(context, c);
// TODO Auto-generated constructor stub
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
// TODO Auto-generated method stub
TextView title = (TextView) view.findViewById(R.id.calendarName);
System.out.println("cursor details"
+ cursor.getString(cursor.getColumnIndex(cursor
.getColumnName(1))));
title.setText(cursor.getString(cursor.getColumnIndex(cursor
.getColumnName(1))));
Log.d("click position " , "position is " +cursor.getPosition());
ToggleButton button = (ToggleButton) view.findViewById(R.id.silentToggle);
button.setOnClickListener(this);
Log.d("click position " , "position is " +cursor.getPosition());
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
// TODO Auto-generated method stub
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(context.LAYOUT_INFLATER_SERVICE);
View calendarListView = inflater.inflate(R.layout.calendar_list_item, null);
RowViewHolder rowView = new RowViewHolder();
rowView.mTitle = (TextView)calendarListView.findViewById(R.id.calendarName);
rowView.mButton = (ToggleButton) calendarListView.findViewById(R.id.silentToggle);
rowView.position = cursor.getPosition();
rowView.mTitle.setOnClickListener(titleOnClickListener);
rowView.mButton.setOnClickListener(buttonOnClickListener);
return calendarListView;
}
@Override
public void onClick(View view) {
// TODO Auto-generated method stub
Log.d("item clicked", "clicked");
RowViewHolder holder = (RowViewHolder)view.getTag();
int position = holder.position;
Log.d("common clicked", "clicked -" +position);
}
private OnClickListener titleOnClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
RowViewHolder holder = (RowViewHolder)v.getTag();
int position = holder.position;
Log.d("title clicked", "clicked -" +position);
}
};
private OnClickListener buttonOnClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
RowViewHolder holder = (RowViewHolder)v.getTag();
int position = holder.position;
Log.d("button clicked", "clicked -" +position);
}
};
}
謝謝@Erik Z ...實際上我做的事情,你說的使用持有人..你可以檢查我的代碼...如果你需要我會重新發布我在那裏做的評論......併爲解決方案,你建議我試圖做到..我面對的問題是..當我選擇行的位置越來越設置...但是當我選擇圖像按鈕或切換按鈕內的列表視圖的位置沒有得到設置.. 。 –
@BalaSivagnanam你確定你正確地設置了標籤(必須在bindView中完成)以及正確的視圖。 –