Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.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
Java 我如何通过ArrayList<;字符串>;在主活动的片段中创建_Java_Android_Android Fragments - Fatal编程技术网

Java 我如何通过ArrayList<;字符串>;在主活动的片段中创建

Java 我如何通过ArrayList<;字符串>;在主活动的片段中创建,java,android,android-fragments,Java,Android,Android Fragments,我有一个抽屉菜单,里面有3个项目(餐厅、电影、食物)。它们基本上是3个待办事项列表。每个列表都有其on片段,在视图中有一种向列表中添加项目的方法。 餐馆名单,电影名单,食品清单。 我需要能够通过单击工具栏中的共享图标来共享该列表(通过任何共享频道)。 这是我的片段,我在其中填充了当我单击工具栏上的共享图标时要使用的项目列表。基本上,我需要将“项目”传递给MainActivity并使用它 package com.example.mylists; import android.content.In

我有一个抽屉菜单,里面有3个项目(餐厅、电影、食物)。它们基本上是3个待办事项列表。每个列表都有其on片段,在视图中有一种向列表中添加项目的方法。 餐馆名单,电影名单,食品清单。 我需要能够通过单击工具栏中的共享图标来共享该列表(通过任何共享频道)。 这是我的片段,我在其中填充了当我单击工具栏上的共享图标时要使用的项目列表。基本上,我需要将“项目”传递给MainActivity并使用它

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); 
    }
}