내 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) {
}
}
대신의 getBaseContext()
사용 con
에 매개 변수로 전달 ShowEditDialog
:
Intent myIntent = new Intent(con, AccountDetails.class);
con.startActivity(myIntent);
또는 당신은 또한 얻을 수 있습니다 Context
사용하여 b.getContext()
첫 번째 매개 변수로 의도 생성자에 전달하고 액세스하는 startActivity
방법을
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다