0

カスタムスピナーからダイアログを開いています。たとえば、このダイアログにはダイアログ-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();

ダイアログを閉じる前に

これが私の問題を解決した方法です。誰でも私のコードを調べてレビューし、それを改善する方法を提案できますか?

4

2 に答える 2

0

ここに私のために働く解決策があります。

于 2014-03-16T05:23:54.803 に答える