java - 将数据从自定义对话框类传输到父类

标签 java android

在这里我通过我的父 Activity 调用自定义对话框..当对话框在另一个 Activity 中时包含 ListView ...从该对话框我从 ListView 传输选定的内容..但未能实现我的目标..并尝试过很多方式.. 任何人都可以帮助我实现它。 注意:我在 listitemclick 监听器中出错...

自定义对话框类

public class CustomizeDialog extends Dialog {
org.me.dailogfrmchildact.MainActivity ma;
    Button cancelButton;
    ListView list;
    int item_pos;

    public CustomizeDialog(Context context) {
        super(context);
         Context cs = context;

        /** 'Window.FEATURE_NO_TITLE' - Used to hide the title */
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.dialog);
        ma=new MainActivity();
        list = (ListView) findViewById(R.id.list);
        cancelButton = (Button) findViewById(R.id.OkButton);
        ListviewContent.add("item1");
        ListviewCount.add("20");
        ListviewContent.add("item2");
        ListviewCount.add("30");
        list.setAdapter(new ListViewAdapter(cs));

        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {    
            public void onItemClick(AdapterView<?> arg0, View arg1, int pos, long arg3) {
                item_pos = pos;
                System.out.println("===========item_pos" + pos);
                ma.txt.setText(ListviewContent.get(pos).toString());    
                dismiss();                    
            }
        });

        cancelButton.setOnClickListener(new View.OnClickListener() {

            public void onClick(View arg0) {
                dismiss();
            }
        });
    }    

    private static ArrayList<String> ListviewContent = new ArrayList<String>();
    private static ArrayList<String> ListviewCount = new ArrayList<String>();

    private static class ListViewAdapter extends BaseAdapter {
        private LayoutInflater mInflater;

        public ListViewAdapter(Context context) {
            mInflater = LayoutInflater.from(context);
        }

        public int getCount() {
            return ListviewContent.size();
        }

        public Object getItem(int position) {
            return position;
        }

        public String getCount(int position) {
            return ListviewCount.get(position);
        }

        public String[] getSizeType(int position) {
            String[] str = new String[2];
            str[0] = ListviewContent.get(position);
            str[1] = ListviewCount.get(position);
            return str;
        }

        public long getItemId(int position) {
            return position;
        }

        public View getView(int position, View convertView, ViewGroup parent) {

            ListContent holder;    
            if (convertView == null) {
                convertView = mInflater.inflate(R.layout.listviewinflate, null);
                holder = new ListContent();
                holder.text = (TextView) convertView.findViewById(R.id.TextView01);
                holder.text.setCompoundDrawables(null, null, null, null);
                holder.count = (TextView) convertView.findViewById(R.id.TextView02);
                holder.count.setCompoundDrawables(null, null, null, null);
                convertView.setTag(holder);
            } else {    
                holder = (ListContent) convertView.getTag();
            }    
            holder.text.setText(ListviewContent.get(position));
            holder.count.setText(ListviewCount.get(position));
            return convertView;
        }    
        static class ListContent {
            TextView text;
            TextView count;
        }
    }
}

mainactivity.class:

public class MainActivity extends Activity {
    org.me.dailogfrmchildact.CustomizeDialog cd;
    Button btn;
    EditText txt;
    CustomizeDialog customizeDialog;
    boolean click = false;    

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);
        cd = new CustomizeDialog(this);
        btn = (Button) findViewById(R.id.btn1);
        txt = (EditText) findViewById(R.id.txt1);
        /** Display Custom Dialog */
        btn.setOnClickListener(new OnClickListener() {

            public void onClick(View arg0) {
                customizeDialog = new CustomizeDialog(MainActivity.this);
                customizeDialog.show();
            }
        });
    }
}

最佳答案

问题是您在 CustomizeDialog 中创建了一个新的 MainActivity,而您应该首先使用创建 CustomizeDialog 的 MainActivity。

让 CustomizeDialog 接受 MainActivity 而不是 Context 并将 ma 设置为等于它。

编辑: 将 CustomizeDialog 的构造函数更改为:

public CustomizeDialog(MainActivity mainActivity) {
   super(mainActivity);
   ma = mainActivity; // Instead of ma = new MainActivity()

   // everything else is the same
}

关于java - 将数据从自定义对话框类传输到父类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4930247/

相关文章:

java - Java 中的 XML 空格格式

JAVA:ThreadGroup.getParent() 上的 SecurityException

android - 当应用程序被杀死时,Glide Cache 不会持续存在

android - 将列表添加到 Cloud Firebase - Android

java - 简单的Java游戏引擎/库

java - Maven Eclipse 插件不考虑 Maven 故障安全插件?

java - Dropwizard 关闭 Hook

android - Proguard 测试后 "No tests were found"APK

android - 如何通过android编程检测电池剩余电量?

android - 在Samsung Galaxy S4 Mini上播放mp3流时,MediaPlayer错误(100,0)