如何从另一个活动访问片段列表?

时间:2015-10-18 17:58:49

标签: java android list android-activity

我有一个包含项目列表的片段。我想从另一个活动中访问该列表,该活动会在用户输入编辑文本时添加列表中的项目并保存该项目。这个项目应该添加到片段列表中。我怎么能实现这个?如何从另一个活动中访问片段中创建的列表?

片段

public class ItemFragment extends Fragment {

    RecyclerView recyclerView;

    IAdapter adapter;
    ArrayList<Expense> items;

    public ItemFragment() {
    }

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

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_item_list, container, false);
        setHasOptionsMenu(true);
        Expense e = new Expense();

        recyclerView = (RecyclerView) view.findViewById(R.id.RecyclerView);
        ImageButton imageButton = (ImageButton) view.findViewById(R.id.imgbtn_fab);
        LinearLayoutManager llm = new LinearLayoutManager(this.getActivity());


        items=new ArrayList<>();
        recyclerView.setLayoutManager(llm);

        recyclerView.setHasFixedSize(true);

        initializeDataType1();
        adapter = new IAdapter(getActivity(),items);
        recyclerView.setAdapter(adapter);


        imageButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent intent = new Intent(ItemFragment.this.getActivity(), Main2Activity.class);
                startActivity(intent);


            }
        });
        return view;
    }

    private void initializeDataType1() {

        items.add(new Expense("1000", "2000", 1));
        items.add(new Expense("2000", "5000", 1));
        items.add(new Expense("3000", "400", 2));
        items.add(new Expense("1000", "4000", 1));
        items.add(new Expense("3000", "3000", 2));
        items.add(new Expense("2000", "100", 1));
        items.add(new Expense("2000", "3333", 2));
        items.add(new Expense("3000", "shopping", 1));
        items.add(new Expense("1000", "food", 1));
        items.add(new Expense("1000", "food", 2));
        items.add(new Expense("2000", "drink", 1));
        items.add(new Expense("3000", "shopping", 2));
        items.add(new Expense("2000", "3333", 1));
        items.add(new Expense("3000", "shopping", 1));
        items.add(new Expense("1000", "food", 1));
        items.add(new Expense("1000", "food", 1));
        items.add(new Expense("2000", "drink", 1));
        items.add(new Expense("3000", "shopping", 1));
    }
}

活动

public class Main2Activity extends Activity {

    public Expense ex;

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

        final EditText amt=(EditText)findViewById(R.id.editText);
       final  EditText exp=(EditText)findViewById(R.id.editText2);
      final  EditText typ=(EditText)findViewById(R.id.typ);


        Button save=(Button)findViewById(R.id.addamt);


        save.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                String amount = amt.getText().toString();
                String expense = exp.getText().toString();
                int type=(Integer.parseInt(typ.getText().toString()));

                Toast.makeText(getApplicationContext(),
                        "Saved",
                        Toast.LENGTH_LONG).show();


            }
        });

    }
}

请帮忙......

5 个答案:

答案 0 :(得分:1)

根据官方文档,无法从其他活动访问碎片:

  

您可以将片段视为活动的模块化部分,它具有自己的生命周期,接收自己的输入事件,并且可以在活动运行时添加或删除(有点像“子活动”)您可以在不同的活动中重复使用。)

     

片段必须始终嵌入到活动中,片段的生命周期直接受主机活动生命周期的影响。例如,当活动暂停时,其中的所有片段也都会暂停,当活动被破坏时,所有片段也都会被破坏。

然而,您可以将列表传递给意图中的第二个活动:

Intent intent = new Intent(ItemFragment.this.getActivity(),Main2Activity.class);
intent.putExtra("key", items);
getActivity().startActivity(intent);

在Main2Activity onCreate()中:

items = (ArrayList<Expense>) getIntent().getSerializableExtra("key");

密钥可以任意选择。请记住,您将收到列表的副本,而不是实际的对象。

答案 1 :(得分:1)

您可以使用片段列表的对象作为指针,并将此指针发送到Main2Activity。当片段再次可见时,只需刷新recyclerview即可。例如,像这样启动Main2Activity:

Intent intent = new Intent(context, Main2Activity.class);
Bundle bundle  = new Bundle();
bundle.putSerializable("list", items);
intent.putExtras(bundle);
context.startActivity(intent);

在你的onCreate()方法中接收这个列表指针并添加项目。完成活动并恢复片段后,只需刷新recyclerview。

答案 2 :(得分:0)

将该列表传递给Activity,进行更改,将列表传回片段并显示新列表。

答案 3 :(得分:0)

只需在Fragment上创建一个返回此列表的公共方法。

然后获取对您的片段的引用并调用该方法。

答案 4 :(得分:0)

假设从用户获取数据后不需要Activity类。如果是这种情况,请使用startActivityForResult从片段中启动活动。当用户完成输入所有EditText字段并点击Save后,将所有数据设置为一个包并finish()该活动。现在从片段的onActivityResult获取数据并相应地更新列表。