형아들 나좀 도와줘ㅠㅠ

어플이 실행은 되는데 특정 코드에 접근하면 에러가 뜨면서 어플이 종료돼요;;

어플 구조가 어떻게 되잇냐하면..MainActivity.java, CustomAdapter.java, CustomDialog.java, Builder.java(커스텀대화상자 생성시 필요한거야)

CustomAdapter는 MainActivity에 커스텀리스트뷰가 있어서 만들어놓은거야...

커스텀리스트뷰의 리스트아이템에 텍스트뷰 여러개랑 체크박스 같은걸 여러개 넣어놧거든..대충 구조는 이래..

내가 원하는 어플실행모습은..커스텀리스트뷰에서 리스트아이템을 클릭하면 그 리스트아이템에 대한 커스텀대화상자를 띄우고

대화상자에 라디오 버튼 여러개가 잇는데 설정한 후에 확인버튼 누르면 설정된 값을 다른 리스트뷰에 받아와서 리스트아이템으로 추가 시키고 싶거든..

그런데..내가 리스트뷰의 리스트아이템 클릭 이벤트를 MainActivity.java가 아닌 CustomAdapter.java 에 만들어놧어..

그래서 CustomAdapter.java의 함수안에다 MainActivity의 객체 ma를 하나 만들고 ma로 여러방법을 시도해봣는데...

 ma.showDialog(ma.CUSTOM_DIALOG);  // ma.getParent().showDialog(CUSTOM_DIALOG); 요런거

그런데 안되서 이번엔 MainActivity.java 안에 public void openDialog(){MainActivity.this.showDialog(CUSTOM_DIALOG); }; 이거 만들고

CustomAdapter.java의 함수안에서 ma.openDialog(); 를 넣어봣는데..이것두 어플 실행은 되는데 리스트 클릭하면 에러뜨면서 종료ㅠㅠ;

내 짧은 지식으론 문제가 먼지 도저히 모르겟어ㅠㅠ

도와줘 형아들..

CustomAdapter.java 파일안의  함수 안에서 대화상자띄우는 코드를 어떻게 해야되?

코드 간단히 올릴게...MainActivity.java
import 문 여러개....
public class MainActivity extends Activity {
 
 public static final int CUSTOM_DIALOG  = 1;
 
 private ListView mLvProduct;
 private ArrayList<ListInfo> mProductList;
 private CustomAdapter mAdapter;
 

    @Override
    public void onCreate(Bundle savedInstanceState) {
      
        mProductList = new ArrayList<ListInfo>();
  mAdapter = new CustomAdapter(this, R.layout.list_row_coffee, mProductList);
  mLvProduct.setAdapter(mAdapter);
 
  setListView();    
    } 
  
    @SuppressWarnings("deprecation")

 public void openDialog(){
     MainActivity.this.showDialog(CUSTOM_DIALOG);  // 이코드가 이 파일안의 버튼 클릭이벤트의 함수 안에 넣으면잘돼
    };
  private void setListView()
 {     
    //리스트 뷰 셋팅 코드
 }   
    //커스텀다이얼로그 생성 코드
    public Dialog onCreateDialog(int dialogId) {
     Dialog dialog = null;
     switch (dialogId) {
      case CUSTOM_DIALOG :
    CustomDialog.Builder customBuilder = new
    CustomDialog.Builder(MainActivity.this);
    customBuilder.setTitle("Custom Dialog")
     .setMessage("짜잉나")
     .setNegativeButton("Cancel", new DialogInterface.Listener() {
      public void (DialogInterface dialog, int which) {
       MainActivity.this
       .dismissDialog(CUSTOM_DIALOG);
      }
     })
     .setPositiveButton("Confirm", new DialogInterface.Listener() {
      public void (DialogInterface dialog, int which) {
       dialog.dismiss();
      }
     });
             dialog = customBuilder.create();
       break;
          }
     return dialog;
    }
     
    }
}
////////////////////////////////////////////////////////////////////////////////////////////////////

CustomAdapter.java   
패키지
임포트문

public class CustomAdapter extends ArrayAdapter<ListInfo> implements Listener
{  
 private Context mContext;
 private int mResource;
 private ArrayList<ListInfo> mList;
 private LayoutInflater mInflater;

 public CustomAdapter(Context context, int layoutResource, ArrayList<ListInfo> objects)
 {
  super(context, layoutResource, objects);
  this.mContext = context;
  this.mResource = layoutResource;
  this.mList = objects;
  this.mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 }
 
 @Override
 public int getCount(){
  return mList.size();
 } 
 @Override
 public ListInfo getItem(int position){
  return mList.get(position);
 } 
 @Override
 public int getPosition(ListInfo item){
  return mList.indexOf(item);
 }
 @Override
 public View getView(int position, View convertView, ViewGroup parent)
 {
  ListInfo list = mList.get(position);
  if(convertView == null)
  {
   convertView = mInflater.inflate(mResource, null);
  }
  if(list != null)
  {
   TextView tvProductName = (TextView) convertView.findViewById(R.id.list_view_row_coffee_name);
      
   tvProductName.setText(list.get_product_name());
  
  }  
  // position을 tag로 저장한다.
  convertView.setTag(position);
  // 만들어진 뷰(row)에 클릭이벤트를 등록한다. 이벤트의 처리는  ()에서 한다.
  convertView.setListener(this);
  return convertView;
 }
 
 public void (View v)
 {
  //위에서 저장한 tag(position)을 꺼내온다.
  int position = (Integer) v.getTag();.

  CheckBox chk = (CheckBox) v.findViewById(R.id.list_row_check);
  chk.setChecked(true);
  Toast.makeText(this.getContext(),"주문버튼클릭",Toast.LENGTH_SHORT).show();
 
  MainActivity ma = new MainActivity();
  //this.getContext();
  //ma.showDialog(ma.CUSTOM_DIALOG);
  ma.openDialog();
  //ma.getParent().showDialog(CUSTOM_DIALOG);
 }
}