首先抱歉,如果這篇文章看起來可能是重複的,但我對Android編程非常新,只有當我仍然無法獲得使用getActivity的滿意答案時才發佈此問題。使用getActivity
理論上我明白在這裏的幾個帖子中使用getActivity(),但我很困惑它是如何在我的代碼中工作的。
我有一個MainActivity類,我從中創建一個對話框onclick複選框。 我有另一個類TaxDialog實現對話框。點擊是/否按鈕,我在MainActivity類中調用方法定義。 下面是代碼:
MainActivty
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity implements View.OnClickListener, View.OnFocusChangeListener {
// onCheck of checkbox showNoticeDialog is called
public void showNoticeDialog() {
// Create an instance of the dialog fragment and show it
Log.i("MyActivity", "Inside showNoticeDialog");
DialogFragment dialog = new TaxDialog();
Bundle args = new Bundle();
args.putString("title", "Test");
args.putString("message", "Test Message");
dialog.setArguments(args);
dialog.show(getSupportFragmentManager(), "dialog");
}
public void doPositiveClick(){
Log.i("MyActivity", "Inside +ve");
}
public void doNegativeClick(){
Log.i("MyActivity", "Inside -ve");
}
}
TaxDialog
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.util.Log;
public class TaxDialog extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Bundle args = getArguments();
String title = args.getString("title");
String message = args.getString("message");
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(title);
builder.setMessage(message);
builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, null);
Log.i("MyActivity", "Expected fault area.");
((MainActivity) getActivity()).doPositiveClick();
}
});
builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
((MainActivity) getActivity()).doNegativeClick();
}
});
builder.create();
return builder.create();
}
}
在這裏,我想了解以下額度的運作
((MainActivity) getActivity()).doPositiveClick();
,也請讓我意識到做同樣事情的其他方式(像MainActivity.this.getActivity(或其他))。
非常感謝。
編輯
謝謝大家。可能我錯誤地構思了這個問題。我唯一的疑問是getActivity()如何返回Activity引用。現在我明白了。
當您使用片段時,它只是獲取上下文的唯一方法。如上所述,您正在使用'DialogFragment'並在'OnClickListener'中需要上下文。 –
最好的建議,我很抱歉會很粗魯,會得到一個好的Java書,並在跳入Android之前閱讀它,無論如何只是爲了回答你的問題,該行代碼通過調用getActivity獲取活動的引用,將其轉換爲MainActivity並調用它的doPositive方法... –