カスタムスピナーからダイアログを開いています。たとえば、このダイアログにはダイアログ-Aがあり、1つのリストビューと1つのボタンがあります。ダイアログ-Aのボタンをクリックすると、別のダイアログ-Bが開いているので、いくつかの作業を行い、ダイアログ-Bのボタンを押して、このダイアログ-Bを閉じた後にダイアログ-Bを閉じます。ダイアログ-AのlistViewを更新したい.
私の質問は、ダイアログ A で listView を更新できるように、どのイベントを呼び出す必要があるかです。
不明な点がありましたら、お許しください。
以下は、私が呼び出している場所からのコードです
最初のコード ブロックの行を参照してください: btnManageCategory.setOnClickListener(new ManageCategory(context));
ManageCategory がダイアログ A であることを考慮してください。2 番目のコード ブロックの行を参照してください: btnAddCategory.setOnClickListener(new AddCategory(context)); AddCategory がダイアログ B であることを考慮してください。
public class SpinnerDialog extends AlertDialog implements OnItemClickListener, View.OnClickListener {
DialogInterface.OnClickListener mListener;
OnItemSelectedListener onItemSelectedListener = new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// TODO Auto-generated method stub
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
};
View promptsView;
Context mContext;
ListView lList;
protected SpinnerDialog(Context context, int inPosition, ArrayAdapter<Accounts> inSpinnerAdapter, DialogInterface.OnClickListener inListener) {
super(context);
// TODO Auto-generated constructor stub
promptsView = getLayoutInflater().inflate(R.layout.activity_spinner_dialog, null);
mListener = inListener;
mContext = context;
lList = (ListView)promptsView.findViewById(R.id.listCategory);
//lList.setBackgroundColor(color.white);
lList.setAdapter(inSpinnerAdapter);
lList.setOnItemClickListener(this);
lList.setChoiceMode(ListView.CHOICE_MODE_SINGLE );
lList.setItemChecked(inPosition, true);
Button btnManageCategory = (Button)promptsView.findViewById(R.id.btnManageCategory);
btnManageCategory.setOnClickListener(new ManageCategory(context));
this.setView(promptsView);
}
@Override
public void onClick(View v) {
if(mListener != null)
mListener.onClick(this, DialogInterface.BUTTON_POSITIVE);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if(mListener != null)
mListener.onClick(SpinnerDialog.this, position);
//String text = parent.getItemAtPosition(position).toString();
onItemSelectedListener.onItemSelected(parent, view, position, id);
}
}
ダイログ A コード:
public class ManageCategory implements android.view.View.OnClickListener {
public Context context = null;
ListView myList;
CategoryListAdapter adapter;
//ArrayAdapter<Category> adapter;
public ManageCategory(Context context) {
this.context = context;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
final Dialog dialog = new Dialog(this.context);
dialog.setContentView(R.layout.manage_category);
dialog.setTitle("Manage Category");
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
// TODO Auto-generated method stub
Log.i("onShow", "now it is called");
}
});
Button btnAddCategory = (Button)dialog.findViewById(R.id.btnAddCategoryy);
btnAddCategory.setOnClickListener(new AddCategory(context));
getAllCategory(dialog.findViewById(R.id.listManageCategory));
dialog.show();
}
public void getAllCategory(View v) {
AccountDS datasource;
datasource = new AccountDS(context);
datasource.open();
List<Category> values = datasource.getAllCategoryList();
datasource.close();
adapter = new CategoryListAdapter(context, R.layout.category_list, values);
myList=(ListView)v;
if (myList == null) {
Log.i(ManageCategory.class.getName(), "List View is null ");
}
if (adapter == null)
Log.i(ManageCategory.class.getName(), "adaptor is null ");
myList.setAdapter(adapter);
myList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
Toast.makeText(context,"Click ListItem Number " + arg2, Toast.LENGTH_LONG).show();
}
});
}
}
ダイログ B コード:
public class AddCategory implements android.view.View.OnClickListener {
public Context context = null;
ListView myList;
CategoryListAdapter adapter;
public AddCategory(Context context) {
this.context = context;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
final Dialog dialog = new Dialog(this.context);
final Context c = this.context;
dialog.setContentView(R.layout.add_category);
dialog.setTitle("Add Category");
Button btnAdd = (Button)dialog.findViewById(R.id.btnAdd);
btnAdd.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
EditText txtCategoryName = (EditText)dialog.findViewById(R.id.txtCategoryName);
Log.i("Add Category", txtCategoryName.getText().toString());
AccountDS datasource;
datasource = new AccountDS(c);
datasource.open();
datasource.createCategory(new Category(0, txtCategoryName.getText().toString()));
datasource.close();
dialog.dismiss();
}
});
Button btnClose = (Button)dialog.findViewById(R.id.btnClose);
btnClose.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
dialog.dismiss();
}
});
dialog.show();
}
}
ManageCategory クラスに静的メソッドを追加
public static void updateData(){
AccountDS datasource;
datasource = new AccountDS(context);
datasource.open();
List<Category> values = datasource.getAllCategoryList();
datasource.close();
adapter = new CategoryListAdapter(context, R.layout.category_list, values);
if (myList == null) {
Log.i(ManageCategory.class.getName(), "List View is null ");
}
if (adapter == null)
Log.i(ManageCategory.class.getName(), "adaptor is null ");
myList.setAdapter(adapter);
}
myList、アダプター、およびコンテキストも静的にして呼び出されるようにする
ManageCategory.updateData();
ダイアログを閉じる前に
これが私の問題を解決した方法です。誰でも私のコードを調べてレビューし、それを改善する方法を提案できますか?