2014-05-15 22 views
0

我將第二個活動的參數傳遞給第一個活動,但該程序不會輸入第一個活動中的onActivityResult方法,但它不包含任何內容。在BaseAdapter中調用ActivityActiveResult

在我的第一個Acitivity中,我有2個clases。 第一個我做一個查詢和我所說的第二類ListAdapter:

public class view_records extends Activity { 
    public void getProduct() { 
    comandSQL = "Select * from Inventario";  
    try { 
    Statement statement = MainActivity.connect.createStatement(); 
    rs = statement.executeQuery(comandSQL); 
    ArrayList<product_model> product_list = new ArrayList<product_model>(); 
    String tidno = "", tdesc = ""; 
     while(rs.next()){ 
      tidno = rs.getString("No_"); 
      tdesc = rs.getString("Descripción Completa"); 
       product_model _ProductModel = new product_model(); 
      _ProductModel.setIdno(tidno); 
      _ProductModel.setProductDesc(tdesc); 
      _productlist.add(_ProductModel); 
     } 
     listview.setAdapter(new ListAdapter(this)); 

} catch (Exception e) { 
    Log.e("ERROR",e.getMessage()); 
    } 

} `

在第二類我稱之爲第二活動

private class ListAdapter extends BaseAdapter { 
    LayoutInflater inflater; 
    ViewHolder viewHolder; 
    int request_code = 1; 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.modelo_productos, null); 
     viewHolder = new ViewHolder(); 

     viewHolder.txt_prod = (TextView) convertView.findViewById(R.id.tv_productos); 
      viewHolder.txt_desc = (TextView) convertView.findViewById(R.id.tv_desc); 

      convertView.setTag(viewHolder); 
     } else { 
      viewHolder = (ViewHolder) convertView.getTag(); 
     } 

     viewHolder.txt_prod.setText(_productlist.get(position).getIdno().trim()); 
     viewHolder.txt_desc.setText(_productlist.get(position).getProductDesc().trim()); 

     final int temp = position; 

     (convertView.findViewById(R.id.bt_modificar)).setOnClickListener(new OnClickListener() { 
        public void onClick(View arg0) { 
         modificarProd(temp); 
        } 
       }); 
     return convertView; 
    } 


    protected void modificarProd(int temp) 
    { 
     String pos = Integer.toString(temp); 

     String _productid = String.valueOf(_productlist.get(temp).getIdno()); 
     String _productdesc = _productlist.get(temp).getProductDesc(); 

     Intent intent = new Intent(getApplicationContext(), modificar_productos.class); 
     Bundle bundle = new Bundle(); 
     bundle.putString("id", _productid); 
     bundle.putString("desc", _productdesc); 
      bundle.putString("pos", pos); 
     intent.putExtras(bundle); 
     startActivityForResult(intent, request_code); 
    } 

    protected void onActivityResult(int requestCode, int resultCode, Intent data){ 
     if (RESULT_OK == request_code){ 
      String result = data.getStringExtra("pos"); 
      _productlist.remove(result); 
      notifyDataSetChanged(); 
     } 
    } 

} 

private class ViewHolder { 
    TextView txt_desc; 
    Button btOK; 
    int position; 
} 

}

這是第二活動的一部分

public class modificar_productos extends Activity implements OnClickListener { 
String pos; 
double costo; 
Intent i; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.modificar_productos); 

    i = getIntent(); 

    tvProd = (TextView) findViewById(R.id.tv_prod); 
    tvDesc = (TextView) findViewById(R.id.tv_desc); 

      tvProd.setText(i.getExtras().getString("id")); 
    tvDesc.setText(i.getExtras().getString("desc")); 
    pos = i.getExtras().getString("pos"); 
    btGuardar = (Button) findViewById(R.id.bt_guardar); 
    btGuardar.setOnClickListener(this); 
} 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    switch (v.getId()) { 
    case R.id.bt_guardar: 
     if (etCant.getText().toString().equals("")) { 
      Toast.makeText(modificar_productos.this, "Por favor, ingrese la cantidad",Toast.LENGTH_LONG).show(); 
     } else { 

      Intent data = new Intent(); 
      data.putExtra("pos",pos); 
      setResult(RESULT_OK, data); 
      finish(); 
     } 
     break; 
    } 
} 

}

回答

1

您正在使用錯誤的條件:

protected void onActivityResult(int requestCode, int resultCode, Intent data){ 
    if (RESULT_OK == request_code){ <--- here 
    ... 
    } 
} 

應該是:

protected void onActivityResult(int requestCode, int resultCode, Intent data){ 
    if (RESULT_OK == resultCode){ 
    ... 
    } 
} 

的requestCode是你開始你的活動代碼:startActivityForResult(intent, request_code),所以你可以使用它像這樣:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data){ 
    switch (requestCode) { 
     case request_code: 
      if (resultCode == RESULT_OK) { 
       // do your stuff here 
      } 
     break; 
    } 
} 

編輯1:您必須將onActivityResult方法轉換爲view_recordsActivity類。 ListAdapterview_records啓動,因此它會將結果傳遞給此活動。

編輯2:清爽適配器

public class view_records extends Activity { 

    ListAdapter mAdapter; // create adapter handler 

    public void getProduct() { 
    // ... 
    mAdapter = new ListAdapter(this); 
    listview.setAdapter(mAdapter); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data){ 
     switch (requestCode) { 
      case request_code: 
       if (resultCode == RESULT_OK) { 
        mAdapter.notifyDataSetChanged(); 
       } 
      break; 
     } 
    } 

} 
+0

嗨!我試過了,但是它不起作用:(我在一些例子中看到這個方法有@override,我無法做到這一點 – user3524791

+0

你不能在ListAdapter類中使用'onActivityResult',它必須被使用在Activity類中使用@Override將'onActivityResult'放入'view_records'活動 – schabluk

+0

It works !!但是...我必須刷新我的適配器,我從ListAdapter類中調用它... – user3524791

相關問題