Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何将数据数组列表从片段传递回其活动_Android_Android Fragments_Android Activity_Arraylist - Fatal编程技术网

Android 如何将数据数组列表从片段传递回其活动

Android 如何将数据数组列表从片段传递回其活动,android,android-fragments,android-activity,arraylist,Android,Android Fragments,Android Activity,Arraylist,我有一个活动,我启动了一个片段来选择一些列表,在选择之后,我想在片段中获得所选内容的列表 我使用了onActivityResult()。。。!!但它不起作用 请帮忙 这是我的活动代码: public class MainActivity extends AppCompatActivity implements View.OnClickListener { private RecyclerView foldersRV; private RecyclerView.Adapter fo

我有一个活动,我启动了一个片段来选择一些列表,在选择之后,我想在片段中获得所选内容的列表

我使用了onActivityResult()。。。!!但它不起作用

请帮忙

这是我的活动代码:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private RecyclerView foldersRV;
    private RecyclerView.Adapter foldersAdapter;
    private AppCompatButton addFolderBtn;
    private AppCompatTextView hiddenText;
    private List<String> selectedFoldersToHide = new ArrayList<>();
    private static final int REQ_FOR_FOLDERS = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
        addFolderBtn = (AppCompatButton) findViewById(R.id.add_folder_btn);
        hiddenText = (AppCompatTextView) findViewById(R.id.hidden_text_view);

        foldersRV = (RecyclerView) findViewById(R.id.folders_list_recycler_view);
        foldersRV.setVisibility(View.GONE);
        hiddenText.setVisibility(View.VISIBLE);

        addFolderBtn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.add_folder_btn:
                moveToFragment(new FoldersHiddenFragment(), "Add Folders Fragment");
        }
    }

    private void moveToFragment(Fragment toFragment, String TAG) {
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

        Fragment fragment = getSupportFragmentManager().findFragmentByTag(TAG);
        if (fragment != null && fragment.isVisible()) {
            System.out.println("*** ALREADY there ****");
        } else {
            transaction.replace(R.id.main, toFragment, TAG);
            transaction.addToBackStack(null).commit();
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK && requestCode == REQ_FOR_FOLDERS) {
            selectedFoldersToHide = data.getStringArrayListExtra("FOLDERS_TO_HIDE");
        }
    }

}
public类MainActivity扩展AppCompatActivity实现View.OnClickListener{
私人回收站查看文件夹SRV;
专用回收视图。适配器文件夹适配器;
私有AppCompatButton addFolderBtn;
私有AppCompatTextView hiddenText;
private List selectedFoldersToHide=new ArrayList();
文件夹的专用静态最终整型请求=1;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
私有void initView(){
addFolderBtn=(AppCompatButton)findViewById(R.id.add_folder_btn);
hiddenText=(AppCompatTextView)findViewById(R.id.hidden\u text\u视图);
foldersRV=(RecyclerView)findViewById(R.id.folders\u list\u recycler\u view);
foldersRV.setVisibility(View.GONE);
hiddenText.setVisibility(View.VISIBLE);
addFolderBtn.setOnClickListener(此);
}
@凌驾
公共void onClick(视图v){
开关(v.getId()){
案例R.id.add\u文件夹\u btn:
moveToFragment(新的FoldersHiddenFragment(),“添加文件夹片段”);
}
}
私有void moveToFragment(Fragment-toFragment,字符串标记){
FragmentTransaction=getSupportFragmentManager().beginTransaction();
Fragment Fragment=getSupportFragmentManager().findFragmentByTag(标记);
if(fragment!=null&&fragment.isVisible()){
System.out.println(“***已存在****”);
}否则{
事务。替换(R.id.main、toFragment、TAG);
transaction.addToBackStack(null.commit();
}
}
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
if(resultCode==RESULT\u OK&&requestCode==REQ\u FOR\u文件夹){
selectedFoldersToHide=data.getStringArrayListExtra(“文件夹到隐藏”);
}
}
}
下面是我的片段代码:

public class FoldersHiddenFragment extends Fragment {
    private View allFoldersView;
    private RecyclerView foldersRV;
    private RecyclerView.Adapter foldersAdapter;
    private AppCompatButton hideFoldersBtn;
    private ArrayList<String> selectedFoldersToHide = new ArrayList<>();

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        allFoldersView = inflater.inflate(R.layout.folders_hidden_fragment_view, container, false);
        initView();
        return allFoldersView;
    }

    private void initView() {
        foldersRV = (RecyclerView) allFoldersView.findViewById(R.id.folders_list_recycler_view);
        foldersRV.setHasFixedSize(true);
        foldersRV.setLayoutManager(new LinearLayoutManager(getActivity()));
        MyFiles myFiles = new MyFiles();

        foldersAdapter = new FoldersAdapter(getActivity(), myFiles.getAllDirectoriesNames(), new FoldersAdapter.FileInterface() {
            @Override
            public void getFilesSelected(List<String> folderSelectedList) {
                selectedFoldersToHide = (ArrayList<String>) folderSelectedList;
            }
        });
        foldersRV.setAdapter(foldersAdapter);
        foldersAdapter.notifyDataSetChanged();

        hideFoldersBtn = (AppCompatButton) allFoldersView.findViewById(R.id.hide_folder_btn);

        hideFoldersBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                System.out.println("******** TOTAL SELECTED: " + selectedFoldersToHide.size());
                Intent intent = new Intent(getActivity(), MainActivity.class);
                intent.putStringArrayListExtra("FOLDERS_TO_HIDE", selectedFoldersToHide);
                getActivity().setResult(RESULT_OK, intent);
                getActivity().getSupportFragmentManager().popBackStack();
            }
        });
    }
}
公共类FoldersHiddenFragment扩展片段{
私有视图allFoldersView;
私人回收站查看文件夹SRV;
专用回收视图。适配器文件夹适配器;
私有AppCompatButton隐藏文件夹sbtn;
private ArrayList selectedFoldersToHide=new ArrayList();
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
allFoldersView=充气机。充气(R.layout.folders\u hidden\u fragment\u视图,容器,false);
initView();
返回所有文件夹视图;
}
私有void initView(){
foldersRV=(RecyclerView)allFoldersView.findviewbyd(R.id.folders\u list\u recycler\u view);
foldersRV.setHasFixedSize(true);
setLayoutManager(新的LinearLayoutManager(getActivity());
MyFiles MyFiles=新建MyFiles();
foldersAdapter=new foldersAdapter(getActivity(),myFiles.getAllDirectoriesNames(),new foldersAdapter.FileInterface()){
@凌驾
public void getfileselected(列表文件夹selectedlist){
selectedFoldersToHide=(ArrayList)folderSelectedList;
}
});
foldersRV.setAdapter(foldersAdapter);
foldersAdapter.notifyDataSetChanged();
hideFoldersBtn=(AppCompatButton)allFoldersView.findViewById(R.id.hide_folder_btn);
hideFoldersBtn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
System.out.println(“******所选总数:”+selectedFoldersToHide.size());
Intent Intent=新的Intent(getActivity(),MainActivity.class);
intent.putStringArrayListExtra(“要隐藏的文件夹”,selectedFoldersToHide);
getActivity().setResult(结果正常,意图);
getActivity().getSupportFragmentManager().popBackStack();
}
});
}
}
1)这是将数据从片段传递到活动的基本示例:

片段A中的

((ParentActivity)getActivity()).dispatchInformations(list);
在家长活动中

public void dispatchInformations(List dataList){

}
2)或创建一个接口,并在活动传递引用中实现对片段的,并在活动中获得结果。

1)这是将数据从片段传递到活动的一个基本示例:

片段A中的

((ParentActivity)getActivity()).dispatchInformations(list);
在家长活动中

public void dispatchInformations(List dataList){

}
2)或创建一个接口,并在活动中实现对片段的传递引用,并在活动中获得结果。

最简单的方法是使用:

最简单的方法是使用:


创建一个接口,比如说
PassArrayList
,并在
活动中实现它

 public interface passArrayList {
        public void onItemsSelected(List<String> selectedItems);           
}

public class MainActivity extends AppCompatActivity implements passArrayList{
    // ...
    @override
    public void onItemsSelected(List<String> selectedItems){
      //your code goes here
    } 
}

在代码中的某个地方,当您想将歌曲列表传回
活动时,请调用
mCallback
对象上的方法
onitemselected()
,并将您的
ArrayList
传递给此方法。然后,此
ArrayList
将作为
活动中的方法
onnimsselected()
的参数,您可以使用它制作任何您喜欢的东西。但是不要忘记在
ondeach()
hook方法中取消指向
mCallback
的链接,以防止上下文泄漏。

创建一个接口,比如说
PassArrayList
,并在
活动中实现它

 public interface passArrayList {
        public void onItemsSelected(List<String> selectedItems);           
}

public class MainActivity extends AppCompatActivity implements passArrayList{
    // ...
    @override
    public void onItemsSelected(List<String> selectedItems){
      //your code goes here
    } 
}
在代码中的某个地方,当您想将歌曲列表传回
活动时
调用
mCallback
obj上的方法
onnimsselected()