Java 我如何通过ArrayList<;字符串>;在主活动的片段中创建
我有一个抽屉菜单,里面有3个项目(餐厅、电影、食物)。它们基本上是3个待办事项列表。每个列表都有其on片段,在视图中有一种向列表中添加项目的方法。 餐馆名单,电影名单,食品清单。 我需要能够通过单击工具栏中的共享图标来共享该列表(通过任何共享频道)。 这是我的片段,我在其中填充了当我单击工具栏上的共享图标时要使用的项目列表。基本上,我需要将“项目”传递给MainActivity并使用它Java 我如何通过ArrayList<;字符串>;在主活动的片段中创建,java,android,android-fragments,Java,Android,Android Fragments,我有一个抽屉菜单,里面有3个项目(餐厅、电影、食物)。它们基本上是3个待办事项列表。每个列表都有其on片段,在视图中有一种向列表中添加项目的方法。 餐馆名单,电影名单,食品清单。 我需要能够通过单击工具栏中的共享图标来共享该列表(通过任何共享频道)。 这是我的片段,我在其中填充了当我单击工具栏上的共享图标时要使用的项目列表。基本上,我需要将“项目”传递给MainActivity并使用它 package com.example.mylists; import android.content.In
package com.example.mylists;
import android.content.Intent;
public class FoodFragment extends Fragment {
public FoodFragment() {
// Required empty public constructor
}
private ArrayList<String> items;
private ArrayAdapter<String> itemsAdapter;
private ListView lvItems;
private static final String TAG = "FoodFragment";
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
Log.i(TAG, "in on onCreateView ");
View view = inflater.inflate(R.layout.fragment_food, container, false);
lvItems = (ListView) view.findViewById(R.id.lvItems);
items = new ArrayList<String>();
readItems();
itemsAdapter = new ArrayAdapter<String>(view.getContext(),android.R.layout.simple_list_item_1, items);
lvItems.setAdapter(itemsAdapter);
if (items.isEmpty())
items.add("Dummy Item");
final EditText newTask = (EditText) view.findViewById(R.id.etNewItem);
Button btnAdd = (Button) view.findViewById(R.id.btnAddItem);
btnAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String itemText = newTask.getText().toString();
itemsAdapter.add(itemText);
newTask.setText("");
writeItems();
Log.i(TAG, "in on send data ");
}
});
return view;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
Log.i(TAG, "in on onViewCreated ");
super.onViewCreated(view, savedInstanceState);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
Log.i(TAG, "in on onActivityCreated ");
super.onActivityCreated(savedInstanceState);
OnItemLongClickListener listener = new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int position, long id) {
//Log.i(TAG, "in on onItemLongClick ");
//Toast.makeText( getActivity().getBaseContext() , "Long Clicked " , Toast.LENGTH_SHORT).show();
items.remove(position);
itemsAdapter.notifyDataSetChanged();
writeItems();
//return true;
return false;
}
};
lvItems.setOnItemLongClickListener(listener);
}
private void readItems() {
File filesDir = getContext().getFilesDir();
File todoFile = new File(filesDir, "todo.txt");
try {
items = new ArrayList<String>(FileUtils.readLines(todoFile));
} catch (IOException e) {
items = new ArrayList<String>();
}
}
private void writeItems() {
File filesDir = getContext().getFilesDir();
File todoFile = new File(filesDir, "todo.txt");
try {
FileUtils.writeLines(todoFile, items);
} catch (IOException e) {
e.printStackTrace();
}
}
}
package com.example.mylists;
导入android.content.Intent;
公共类FoodFragment扩展了片段{
公共食品碎片(){
//必需的空公共构造函数
}
私有ArrayList项;
专用阵列适配器项适配器;
私有ListView项目;
私有静态最终字符串TAG=“FoodFragment”;
@可空
@凌驾
创建视图时的公共视图(@NonNull LayoutInflater inflater、@Nullable ViewGroup container、@Nullable Bundle savedInstanceState){
Log.i(标记“在onCreateView上”);
视图=充气机。充气(R.layout.fragment\u食品,容器,假);
lvItems=(ListView)view.findViewById(R.id.lvItems);
items=newarraylist();
readItems();
itemsAdapter=newarrayadapter(view.getContext(),android.R.layout.simple\u list\u item\u 1,items);
lvItems.setAdapter(itemsAdapter);
if(items.isEmpty())
项目。添加(“虚拟项目”);
final EditText newTask=(EditText)view.findViewById(R.id.etNewItem);
Button btnAdd=(Button)view.findViewById(R.id.btnAddItem);
btnAdd.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
String itemText=newTask.getText().toString();
itemsAdapter.add(itemText);
newTask.setText(“”);
writeItems();
Log.i(标记“发送数据时输入”);
}
});
返回视图;
}
@凌驾
已创建公用void onview(@NonNull视图,@Nullable Bundle savedInstanceState){
Log.i(标记“在onViewCreated上输入”);
super.onViewCreated(视图,savedInstanceState);
}
@凌驾
已创建ActivityState上的公共无效(Bundle savedInstanceState){
Log.i(标记“在onActivityCreated上”);
super.onActivityCreated(savedInstanceState);
OnItemLongClickListener=新建OnItemLongClickListener(){
@凌驾
公共布尔值长单击(AdapterView arg0、视图arg1、整型位置、长id){
//Log.i(标记“在长时间单击中”);
//Toast.makeText(getActivity().getBaseContext(),“长点击”,Toast.LENGTH_SHORT.show();
项目。移除(位置);
itemsAdapter.notifyDataSetChanged();
writeItems();
//返回true;
返回false;
}
};
lvItems.setOnItemLongClickListener(listener);
}
私有void readItems(){
File filesDir=getContext().getFilesDir();
File todoFile=新文件(filesDir,“todo.txt”);
试一试{
items=newarraylist(FileUtils.readLines(todoFile));
}捕获(IOE异常){
items=newarraylist();
}
}
私有无效writeItems(){
File filesDir=getContext().getFilesDir();
File todoFile=新文件(filesDir,“todo.txt”);
试一试{
FileUtils.writeLines(todoFile,items);
}捕获(IOE异常){
e、 printStackTrace();
}
}
}
1.定义接口,2.让您的活动实现接口3.使用(接口)getActivity()将您的活动强制转换到该接口,然后您可以调用接口中的方法发送ArrayList“items”您应该在MainActivity中声明ArrayList items
。然后为项创建公共setter方法
public void setItems(ArrayList<String> items){
this.items = items;
}
回调接口
interface MyInterface {
void setItems(ArrayList<String> items);
}
我想在主要活动中,这比公开赛更好。因为,你知道,它就像更可靠的代码。在这种情况下,您的片段不包含对活动的引用,甚至不知道它的存在。在主活动中,我希望能够使用“项目”
interface MyInterface {
void setItems(ArrayList<String> items);
}
class MyActivity {
ArrayList<String> items;
MyInterface itemsCallback = new MyInterface(){
@Override
void setItems(ArrayList<String> items){
this.items = items;
}
}
myFragment.setItemsCallback(itemsCallback);
}
class MyFragment {
private MyInterface itemsCallback;
public void setItemsCallback(MyInterface itemsCallback){
this.itemsCallback = itemsCallback;
}
private void readItems(){
...
itemsCallback.setItems(items);
}
}