我有一个包含项目列表的片段。我想从另一个活动中访问该列表,该活动会在用户输入编辑文本时添加列表中的项目并保存该项目。这个项目应该添加到片段列表中。我怎么能实现这个?如何从另一个活动中访问片段中创建的列表?
片段
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();
}
});
}
}
请帮忙......
答案 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
获取数据并相应地更新列表。