0

내 프로젝트 내에서 나는 다중 열 ListView를 사용합니다. 이 ListView는 개별 Java 모듈에서 구현 한 사용자 정의 CursorAdapter에서 데이터를 그립니다. ListView 행 내에서 뷰의 몇 가지에 리스너가 있으며, 이들은 CursorAdapter 내에서 구현됩니다. 리스너 중 하나는이를 호출 한 뷰 컨텐츠를 편집하여 데이터를 기본 데이터베이스로 다시 저장해야합니다.안드로이드 - 코딩 onActivityResult 포함 된 startActivity에 대한 사용자 정의 CursorAdapter

받은 조언을 기반으로 here startActivityForResult를 코딩 할 수있었습니다. 그러나 대화 활동의 응답을 처리하기 위해 onActivityResult 루틴을 코딩하는 방법이나 위치를 찾을 수 없습니다. 누구 조언있어?

public class CustomCursorAdapter extends CursorAdapter { 

private static final String TAG = CustomCursorAdapter.class.getSimpleName(); 
private static final int EDIT_TIME_REQUEST_CODE = 11; 

protected static class RowViewHolder { 
    public Button btnLap; 
    public TextView tvTime; 
    public Context ctx; 
} 

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.ctx = context; 
    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(); 
      // get the RowViewHolder 
      RowViewHolder holder = new RowViewHolder(); 
      holder = (RowViewHolder) ((View) v.getParent()).getTag(); 
      Intent intentTimeEdit = new Intent(holder.ctx, TimeEditDialog.class); 
      intentTimeEdit.putExtra("Time", strTime); 
      // Set up intent to pass to dialog 
      ((Activity)holder.ctx).startActivityForResult(intentTimeEdit, EDIT_TIME_REQUEST_CODE); 
     } 
    } 
}; 

}

답변

0

나는 문제가 해결 된 것입니다. ListView의 행 요소의 Listener 내에서 유사한 문제가있는 사용자의 경우, 사용자 정의 CursorAdapter의 Listener 내에서 부모 작업의 정적 루틴 인 editTime을 호출하고 작업을 전달하고 컨텍스트를 캐스팅하고 ctx를 항목에 전달하고 데이터베이스의 ROWID "holder"는 행 뷰 ​​내에서 태그가 지정된 rowviewholder입니다.

public static void editTime(Activity activity, View v, long intTargetId) { 
    tvTarget = (TextView) v; 
    String strTime = tvTarget.getText().toString(); 
    // Set up intent to pass to dialog 
    Intent intentTimeEdit = new Intent(activity.getBaseContext(), TimeEditDialog.class); 
    intentTimeEdit.putExtra("Request Code", EDIT_TIME_REQUEST_CODE); 
    intentTimeEdit.putExtra("Time", strTime); 
    intentTimeEdit.putExtra("Row Id", intTargetId); 
    activity.startActivityForResult(intentTimeEdit,EDIT_TIME_REQUEST_CODE); 
} 

대화의 응답은 다음 부모 활동의 onActivityResult를 방법으로 처리되었다

   RaceSheetActivity.editTime((Activity)holder.ctx, v, holder.intId); 

편집 시간 루틴

내 TimeEditDialog 활동을했다.

커스텀 CursorAdapter 내에서 처리를 유지하고 부모 작업 내에서 처리해야하는 경우 정적/비 정적 호출을 해결할 수없는 문제가 발생했으며 startActivityForResult 대화 상자에 필요한 작업을 캐스팅 할 수있었습니다. 전달 된 컨텍스트에서 CursorAdapter로 전달하고 부모 작업에서 응답을 처리합니다.

이 문제를 개선 할 수있는 방법은 감사의 뜻을 전합니다.