【问题标题】:collect data in PlaceholderFragment and send it to Activity在 PlaceholderFragment 中收集数据并将其发送到 Activity
【发布时间】:2019-08-26 12:39:03
【问题描述】:

我正在编写一个游戏,每个玩家都有自己的标签。每个 Tab 都是 PlaceholderFragment 的一个实例。我认为实现选项卡和片段的动态计数很容易,但现在我真的不知道如何将输入数据从每个实例获取到 ParentActivity。 也许我应该提到我想使用 java 7 (SDK version min

我用的接口没错,但问题是,用户需要在Activity中按菜单项“保存数据”来保存数据,但是接口是在fragment中定义的。

对我来说重要的是,我首先从每个片段中收集数据,然后再保存它,因为之后我想将给定的数据列表转换为字符串并将该字符串保存在数据库中(否则我不会保存整个游戏,但是只是一个玩家)。

我知道我可以在数据库中定义更多列,但我有一个动态的玩家数量和每个玩家的回合数。

将数组转换为字符串:

private void mergeAll(ArrayList<ArrayList<Integer>> list) {
        ArrayList<String> wholeList = new ArrayList<>();
        for(ArrayList<Integer> partList : list) {
            for(int i = 0; i < partList.size(); i++) {
                wholeList.add(partList.get(i).toString());
            }
        }
        StringBuilder sb = new StringBuilder();
        for(String s : wholeList) {
            sb.append(s);
            sb.append("\t");
        }
        playerAsString = sb.toString();
    }

片段接口

public static PlaceholderFragment newInstance(int index) {
        PlaceholderFragment fragment = new PlaceholderFragment();
        Bundle bundle = new Bundle();
        bundle.putInt("player", index);
        fragment.setArguments(bundle);
        return fragment;
    }

    public interface FragmentToActivity {
        void communicate(String data);
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        try {
            mCallback = (FragmentToActivity) context;
        } catch (ClassCastException e) {
            throw new ClassCastException(context.toString()
                    + " must implement FragmentToActivity");
        }
    }

    @Override
    public void onDetach() {
        mCallback = null;
        super.onDetach();
    }

    private void sendData(String comm)
    {
        mCallback.communicate(comm);
    }

活动:


@Override
    public void communicate(String data) {
        Log.i("got it", data);
    }

 @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {

            case R.id.action_saveData:
                //here i want to collect the strings from each fragment and save it to the database
                return true;

            ...

        }
        return super.onOptionsItemSelected(item);
    }

还有其他方法吗? 据我所知 PlaceholderFragments 没有片段标签或ID,所以我可以循环并获取我需要的字符串。

【问题讨论】:

    标签: java android android-fragments interface fragment


    【解决方案1】:

    有办法做到这一点:

    @Override
        public void communicate(ArrayList<ArrayList<Integer>> data) {
            for(int i = 0; i < numPlayer; i++) {
                if(viewPager.getCurrentItem() == i) {
                    oneGame.set(i, data);
                }
            }
        }
    

    活动中的这个方法从每个片段中收集数据并将其存储在一个 ArrayList 中,然后我使用这个 ArrayList。

    【讨论】:

      猜你喜欢
      • 2020-09-25
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-22
      • 1970-01-01
      相关资源
      最近更新 更多