从 Listwiew 返回到 MainActivity

亚历山大

我从 Fragment 打开 ExpandableListView,它是从 MainActivity 打开的。

在 ListView 中,单击 Item 中的按钮会挂起一个侦听器。

通过单击此按钮,我想将一些值传输到 MainActivity 并将其发送到 WebView。

片段用beginTransaction()打开并写入addToBackStack(null)

当我按下系统按钮的后退按钮时,一切正常,但我无法弄清楚在我的 ExpandableAdapter 类中如何打开 ExpandableListView 以为此 Fragment 调用 OnBackPress ....

现在我只是在 onClick 中调用 MainActivity 并通过 putExtra 传递值。但这每次重新启动我的主要活动,但我不需要它,因为它已经存在,我只需要返回它。

从 MainActivity 调用 Fragment:

    Fragment fragmentWeb = new MainFragment();
    FragmentManager ft = getSupportFragmentManager();

    ft.beginTransaction().replace(R.id.mainlayout, fragmentWeb, dataFrag).addToBackStack(null).commit();

MainFragment 的一部分:

public class MainFragment extends Fragment implements OnBackPressed {
        ......

        getActivity().findViewById(R.id.list).setVisibility(ViewGroup.VISIBLE);
        expListView = (ExpandableListView) getActivity().findViewById(R.id.lvExp);
        new DownloadJason().execute();

        private class DownloadJason extends AsyncTask<Void, Void, Void> {
             // Get Json...
        }

    @Override
    protected void onPostExecute(Void result) {
            super.onPostExecute(result);

            listAdapter = new myExpandableListAdapter(getActivity().getApplicationContext(), listHeader, listDataChild, listDataHeader, getActivity());

            expListView.setAdapter(listAdapter);

    }
}

myExpandableListAdapter 的一部分:

public class myExpandableListAdapter extends BaseExpandableListAdapter {
    private Activity _activity;
    private Context _context;
    private List<String> _listDataHeader; // header titles
    private List<Integer> imgHeader;
    private HashMap<String, List<String>> _listDataChild;
    private HashMap<String, List<String>> _listData;
    private Integer imgType1,imgType2,imgType3,imgType4,imgType5;
    private FragmentManager manager;

    public myExpandableListAdapter(Context context, List<String> listDataHeader,
                                   HashMap<String, List<String>> listChildData,
                                   HashMap<String, List<String>> listData,
                                   Activity activity) {
        this._context = context;
        this._listDataHeader = listDataHeader;
        this._listDataChild = listChildData;
        this._listData = listData;
        this._activity = activity;

    }

    ......

    @Override
    public View getChildView(final int groupPosition, final int childPosition,
                             boolean isLastChild, View convertView, ViewGroup parent) {

        final String childText = (String) getChild(groupPosition, childPosition);
        final String markerId = (String) getData(groupPosition, 0);

        if (convertView == null) {
            LayoutInflater infalInflater = (LayoutInflater) this._context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(R.layout.list_item2, null);
        }

        TextView txtListChild = (TextView) convertView.findViewById(R.id.lblListItem);
        txtListChild.setText(childText);

        ImageButton btnMarker = (ImageButton) convertView.findViewById(R.id.imageButton);
        btnMarker.setImageResource(R.drawable.ic_place_black);


        btnMarker.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(_activity, MainActivity.class);
                intent.putExtra("markerId", markerId);
                _activity.startActivity(intent);
            }
        });

        return convertView;
    }

.....

}
德尼兹

创建两个接口。

1. MainFragmentListener用于与活动/片段通信

2. AdapterClickListener用于与适配器/片段通信。

您必须像这样初始化为MainFragmentListener

MainActivity implements MainFragmentListener{
..
}

在 MainFragment 创建 AdapterClickListener。像这样。

MainFragmentListener mainFragmentListener = null;

然后给MainFragmentListener片段。

Fragment fragmentWeb = new MainFragment();
fragmentWeb.adapterClickListener = this;

在 MainFragment创建 AdapterClickListener 并在 onCreatedView()初始化,然后将此接口提供给适配器。

手部碎片

 AdapterClickListener AdapterClickListener = null;

适配器构造器

public myExpandableListAdapter(Context context, List<String> listDataHeader,
                                   HashMap<String, List<String>> listChildData,
                                   HashMap<String, List<String>> listData,
                                   Activity activity,AdapterClickListener adapterClickListener) {
        this._context = context;
        this._listDataHeader = listDataHeader;
        this._listDataChild = listChildData;
        this._listData = listData;
        this._activity = activity;
        this.adapterClickListener = adapterClickListener;
    }

现在您可以通过界面将您想要的数据发送到主要活动。

btnMarker.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                adapterClickListener.markerClicked(*****);
            }
        });

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章