簡體   English   中英

android從多列listview調用活動

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM