根据活动结果更新Fragment中的Listview。没有找到任何结果

时间:2016-02-08 05:31:15

标签: android listview android-fragments dialog android-actionbar

我有一个活动和一个片段 在我的活动中,我在操作栏中有按钮,在按钮上单击一个弹出的对话框,我有一个列表视图。 如果我从该列表中选择任何项目,该数据将转到片段,并根据活动中的数据显示我的片段列表视图

e.g。如果我选择技术,技术id = 1应该传入我的查询参数,并根据我的片段列表视图应该出现。 每次我从列表中选择不同的项目时,我的片段列表视图应该更新。

但我的问题是我没有获得片段中的任何数据,而且我的列表没有得到更新

Mainactivity.java

 @Override
        public boolean onPrepareOptionsMenu(Menu menu) {
            MenuItem actionViewItem = menu.findItem(R.id.miActionButton);
            // Retrieve the action-view from menu
            View v = MenuItemCompat.getActionView(actionViewItem);
            // Find the button within action-view
            Button b = (Button) v.findViewById(R.id.btnCustomAction);
            // Handle button click here

            b.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    showDialog(CUSTOM_DIALOG_ID);
                }
            });
            return super.onPrepareOptionsMenu(menu);
        }

        @Override
        public Dialog onCreateDialog(int id) {

            Dialog dialog = null;

            switch (id) {
            case CUSTOM_DIALOG_ID:
                dialog = new Dialog(this);
                dialog.setContentView(R.layout.dialoglayout);
                dialog.setTitle("Select Category");

                dialog.setCancelable(true);
                dialog.setCanceledOnTouchOutside(true);

                dialog.setOnCancelListener(new OnCancelListener() {

                    @Override
                    public void onCancel(DialogInterface dialog) {

                    }
                });

                dialog.setOnDismissListener(new OnDismissListener() {

                    @Override
                    public void onDismiss(DialogInterface dialog) {
                        // TODO Auto-generated method stub

                    }
                });

                // Prepare ListView in dialog
                dialog_ListView = (ListView) dialog.findViewById(R.id.dialoglist);
                ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                        android.R.layout.simple_list_item_1, listContent);
                dialog_ListView.setAdapter(adapter);
                dialog_ListView.setOnItemClickListener(new OnItemClickListener() {

                    @Override
                    public void onItemClick(AdapterView<?> parent, View view,
                            int position, long id) {
                        // TODO Auto-generated method stub

                        // i = (int) parent.getItemIdAtPosition(position);

                        category_name = (String) parent.getItemAtPosition(position);

                        Log.d("category name", category_name);


                        if(category_name.equals("a"))
                        {
                            cat_id=1;

                        }
                        if(category_name.equals("b"))
                        {
                            cat_id=2;
                        }
                        if(category_name.equals("c"))
                        {
                            cat_id=3;
                        }
                        if(category_name.equals("d"))
                        {
                            cat_id=4;
                        }
                        if(category_name.equals("e"))
                        {
                            cat_id=5;
                        }
                        if(category_name.equals("f"))
                        {
                            cat_id=6;
                        }

                         Log.d("id",""+cat_id);

                        dismissDialog(CUSTOM_DIALOG_ID);
                    }

                });

                break;
            }

            return dialog;
        }


    public int getMyData() {
            return cat_id;
        }

Fragment.java:

 public String param;
        public String url;
        public int cat_id;


        Mainactivity activity = (Mainactivity) getActivity();
            int myDataFromActivity = activity.getMyData();

            cat_id = myDataFromActivity;
            Log.d("Category_id", "" + cat_id);


            Map<String, String> map1 = new HashMap<String, String>();
                param = "?cat_id=" + cat_id;

                //URL is fake , original url is working fine.
                url = "http://www.abbcd.com/xyz/webservices/data/getAllData.php"
                        + param;

                map1.put("url", url);

                new MultiPartRequester(mainActivity, map1,
                        NetUtils.RequestCode.GET_ALL_DATA,
                        this).execute();

更新部分:

@Override
    public void updateFragmentList(int catId) {
        // TODO Auto-generated method stub

        param = "?cat_id=" + catId;

        url = "http://www.abbcd.com/xyz/webservices/data/getAllData.php"+ param;

        Map<String, String> map1 = new HashMap<String, String>();
        map1.put("url", url);

        new MultiPartRequester(mainActivity, map1,
                NetUtils.GET_DATA, this)
                .execute();
    }

2 个答案:

答案 0 :(得分:2)

ActivityFragment之间的良好沟通方式是Listeners。如果要更新片段,请使用侦听器并更新片段。在MainActivity

中创建界面

<强>监听

public interface FragmentListener {
        void updateFragmentList(int catId);
}

Fragment中实施

public class MyFragment extends Fragment implements MainActivity.FragmentListener

然后在Fragment的onActivityCreated

@Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        ((MainActivity) getActivity()).setFragmentListener(this);
}

<强> MainActivity

public void setFragmentListener(FragmentListener listener)
    {

            this.fragmentListener = listener;

    }

public void sendDataToFragment(int catId) {
      this.fragmentListener.updateFragmentList(catId);
}

希望这有帮助。

<强>更新

使用this.fragmentListener.updateFragmentList(catId);将数据发送到片段,在Fragment中创建方法为``

public void updateFragmentList(int catId){
       //Here update your listview with cat id
}

答案 1 :(得分:-1)

在活动中使用静态全局变量

public static int cat_id = 0;

在片段中访问cat_id,如下所示

 Map<String, String> map1 = new HashMap<String, String>();
                param = "?cat_id=" + activity.cat_id;

或在getMyData方法中进行以下更改

public int getMyData() { 
return cat_id; 
}

<强>编辑:

另一种方法最终起作用,从活动中调用你的fragment方法并在方法中传递cat_id而不是ExampleFragment使用您的片段名称。

ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
fragment.mymethod(cat_id);