从Alertdialog启动另一个Activity

时间:2015-02-27 15:00:03

标签: android android-intent static android-alertdialog non-static

我想从我的AlertDialog" ShowEditDialog"开始一项活动。但得到"非静态方法不能从静态上下文中引用"当我尝试传递意图开始新活动时。

我不能使我的AlertDialog非静态的一个原因是因为我从AccountManager中的静态方法引用它。 有没有办法解决这个问题?代码如下,"非静态来自静态"问题出现在b.setNeutralButton的第一个片段中。

如果需要,请随时询问任何其他代码。

Alerts.class(相关部分的片段)(静态问题的非静态在b.setNeutralButton中)

public class Alerts extends Activity {

public static AlertDialog ShowEditDialog(final Context con,final Account Acc)
{
    AlertDialog.Builder b=new AlertDialog.Builder(con);
    b.setTitle("Account Details");
    LayoutInflater li=LayoutInflater.from(con);
    View v=li.inflate(R.layout.editdialog, null);

    b.setIcon(android.R.drawable.ic_input_get);

    b.setView(v);
    final TextView txtName=(TextView)v.findViewById(R.id.txtDelName);
    final TextView txtAmt=(TextView)v.findViewById(R.id.txtDelAmt);
    final TextView txtPurpose=(TextView)v.findViewById(R.id.txtDelPurpose);
    final Spinner spinTerm=(Spinner)v.findViewById(R.id.spinTerm);
    final Spinner spinStat=(Spinner)v.findViewById(R.id.spinStat);



    Utilities.ManageTermSpinner(con, spinTerm);
    for(int i=0;i<spinTerm.getCount();i++)
    {
        long id=spinTerm.getItemIdAtPosition(i);
        if(id==Acc.getTerms())
        {
            spinTerm.setSelection(i, true);
            break;
        }
    }

    Utilities.ManageStatSpinner(con, spinStat);
    for(int j=0;j<spinStat.getCount();j++)
    {
        long id=spinStat.getItemIdAtPosition(j);
        if(id==Acc.getStatus())
        {
            spinStat.setSelection(j, true);
            break;
        }
    }


    txtName.setText(Acc.getName());
    txtAmt.setText(String.valueOf(Acc.getAmt()));

    b.setPositiveButton("Modify", new OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            Acc.setName(txtName.getText().toString());
            Acc.setAmt(Integer.valueOf(txtAmt.getText().toString()));
            Acc.setPurpose(txtPurpose.getText().toString());
            Acc.setTerms((int) spinTerm.getItemIdAtPosition(spinTerm.getSelectedItemPosition()));
            Acc.setStatus((int) spinStat.getItemIdAtPosition(spinStat.getSelectedItemPosition()));
            try
            {
                DatabaseHelper db=new DatabaseHelper(con);
                db.UpdateAcc(Acc);

            }
            catch(Exception ex)
            {
                CatchError(con, ex.toString());
            }
        }
    });

---HERE--->b.setNeutralButton("Full Details", new OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            // getBaseContext() is where the problem is linked to
            Intent myIntent = new Intent(getBaseContext(), AccountDetails.class);
            startActivity(myIntent);
        }
    });
    b.setNegativeButton("Cancel", null);

    return b.create();
    }

}

AccountManager.class(相对部分的片段)

public class AccountManager extends Activity {
DatabaseHelper dbHelper;
static public GridView grid;
TextView txtTest;
TextView txtTest2;
TextView txtAccounts;
TextView filter;
Spinner spinStat;
Spinner spinTerm;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.gridview);
    grid = (GridView) findViewById(R.id.grid);
    spinStat = (Spinner) findViewById(R.id.spinStat);
    spinTerm = (Spinner) findViewById(R.id.spinTerm);

    final DatabaseHelper db = new DatabaseHelper(this);

            try {
        grid.setOnItemClickListener(new OnItemClickListener() {

         @Override
         public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
               try {

               SQLiteCursor cr = (SQLiteCursor) parent.getItemAtPosition(position);
               String name = cr.getString(cr.getColumnIndex(DatabaseHelper.colName));
               int amount = cr.getInt(cr.getColumnIndex(DatabaseHelper.colAmount));
               String purpose = cr.getString(cr.getColumnIndex(DatabaseHelper.colPurpose));
               String Terms = cr.getString(cr.getColumnIndex(DatabaseHelper.colTermsClass));
               String Status = cr.getString(cr.getColumnIndex(DatabaseHelper.colStatClass));
               String date = cr.getString(cr.getColumnIndex(DatabaseHelper.colDate));
               String editdate = cr.getString(cr.getColumnIndex(DatabaseHelper.colEditDate));
               Account acc = new Account(name, amount, purpose, db.GetTermsID(Terms),date,editdate,db.GetStatID(Status));
               acc.SetID((int) id);
    ---HERE--->AlertDialog diag = Alerts.ShowEditDialog(AccountManager.this, acc);
                                                diag.setOnDismissListener(new OnDismissListener() {

               @Override
               public void onDismiss(DialogInterface dialog) {
                     ShowGrid();
               }
           });
           diag.show();
         } catch (Exception ex) {
           Alerts.CatchError(AccountManager.this, ex.toString());
           }
        }
    });

    } catch (Exception ex) {
  }
}

1 个答案:

答案 0 :(得分:2)

而不是getBaseContext()使用con作为参数传递给ShowEditDialog

Intent myIntent = new Intent(con, AccountDetails.class);
con.startActivity(myIntent);

或者您也可以Context使用b.getContext()作为第一个参数传递给Intent构造函数并访问startActivity方法

相关问题