Android 如何将数据数组列表从片段传递回其活动
我有一个活动,我启动了一个片段来选择一些列表,在选择之后,我想在片段中获得所选内容的列表 我使用了onActivityResult()。。。!!但它不起作用 请帮忙 这是我的活动代码: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
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()