[英]android invoking activity from a multi-column listview
在我的項目中,我有一個帶有多列ListView的活動。 這個ListView從我在單獨的Java模塊中實現的自定義CursorAdapter繪制數據。 我在ListView的行中的幾個視圖上都有偵聽器,並且這些偵聽器是在CursorAdapter中實現的。 偵聽器之一需要編輯調用它的視圖內容,並將數據保存回基礎數據庫。 此編輯需要startActivityForResult(作為自定義對話框)。 但是我收到一個錯誤,因為一個活動只能從另一個活動中調用。 我曾嘗試將startActivityForResult移至父活動中的過程,但這必須是要從偵聽器調用的靜態過程,並且由於startActivityForResult不能處於靜態過程中,因此我收到錯誤消息。 錯誤是“對於類型為new View.OnClickListener(){}的方法startActivityForResult(Intent,int)未定義”
有沒有人有一個從視圖偵聽器調用活動的過程,其中視圖是ListView的行元素?
下面的代碼是我在CursorAdapter中使用的過程。
public class CustomCursorAdapter extends CursorAdapter {
protected static class RowViewHolder {
public Button btnLap;
public TextView tvTime;
}
public CustomCursorAdapter(Context context, Cursor c) {
super(context, c);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View retView = inflater.inflate(R.layout.single_row_item, parent, false);
RowViewHolder holder = new RowViewHolder();
holder.btnLap = (Button) retView.findViewById(R.id.btn_lap);
holder.tvTime = (TextView) retView.findViewById(R.id.tv_time);
holder.btnLap.setOnClickListener(btnLapOnClickListener);
holder.tvTime.setOnClickListener(tvTimeOnClickListener);
retView.setTag(holder);
return retView;
}
...
private OnClickListener tvTimeOnClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
TextView tv = (TextView) v;
String strTime = tv.getText().toString();
Intent intentTimeEdit = new Intent(getBaseContext(), TimeEditDialog.class);
intentTimeEdit.putExtra("Time", strTime);
startActivityForResult(intentTimeEdit, EDIT_TIME_REQUEST_CODE);
}
};
根據下面的評論,OnClickListener的代碼已更正為:
TextView tv = (TextView) v;
String strTime = tv.getText().toString();
RowViewHolder holder = new RowViewHolder();
holder = (RowViewHolder) ((View) v.getParent()).getTag();
Intent intentTimeEdit = new Intent(holder.ctx, TimeEditDialog.class);
intentTimeEdit.putExtra("Time", strTime);
((Activity)holder.ctx).startActivityForResult(intentTimeEdit, EDIT_TIME_REQUEST_CODE);
從The method startActivityForResult(Intent, int) is undefined for the type new View.OnClickListener(){}
它清楚地表明,只有在類擴展了Acitvity時,才可以調用startActivityForResult或startActivity。它甚至不接受內部類。 。
嘗試
((Activity)getBaseContext()).startActivityForResult(intentTimeEdit, EDIT_TIME_REQUEST_CODE);
並檢查結果。
嘗試在適配器類的構造函數中傳遞上下文,然后代替
startActivityForResult(intentTimeEdit, EDIT_TIME_REQUEST_CODE);
做
ctx.startActivityForResult(intentTimeEdit, EDIT_TIME_REQUEST_CODE);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.