Android 在活动和片段之间传递数据

Android 在活动和片段之间传递数据,android,android-fragments,android-bundle,Android,Android Fragments,Android Bundle,我想使用Bundle将数据从活动传递到片段(我使用Bundle在两个片段之间传递数据,这就成功了)。 在我的活动中,我有一个ListView,在OnItemClickListener中,我想打开一个新片段,以及单击的项目,它通过活动传递给这个片段。但该项为null,因此基本上不向片段发送任何内容 以下是我的活动: public class Jegyek extends AppCompatActivity { View v; DB mydb; ListView listV

我想使用Bundle将数据从活动传递到片段(我使用Bundle在两个片段之间传递数据,这就成功了)。 在我的活动中,我有一个ListView,在OnItemClickListener中,我想打开一个新片段,以及单击的项目,它通过活动传递给这个片段。但该项为null,因此基本上不向片段发送任何内容

以下是我的活动:

public class Jegyek extends AppCompatActivity {

    View v;
    DB mydb;
    ListView listView;
    private String teszt;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_jegyek);


    listView = (ListView)findViewById(R.id.jegyekLista);
    mydb = new DB(this);

    final ArrayList<String> thelist = new ArrayList<>();
    Cursor data = mydb.getTantargynev();

    if (data.getCount() == 0) {
        Toast.makeText(this, "Nincs jegyek hozzáadva", Toast.LENGTH_SHORT).show();
    }
    else {
        while (data.moveToNext()) {
            thelist.add(data.getString(0));
            ListAdapter listadapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, thelist);
            listView.setAdapter(listadapter);
        }


        listView.setOnItemClickListener(
                new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                        teszt = thelist.get(i);
                        Bundle bundle = new Bundle();
                        bundle.putString("Tantárgy neve", teszt);
                        Toast.makeText(Jegyek.this, teszt, Toast.LENGTH_SHORT).show();

                        Fragment jegyekAllando = new jegyekAllando();
                        jegyekAllando.setArguments(bundle);
                        FragmentTransaction FragTan = getSupportFragmentManager().beginTransaction();
                        FragTan.replace(R.id.jegyekMenu, jegyekAllando);
                        ListView listaNezet = (ListView) findViewById(R.id.jegyekLista);
                        listaNezet.setVisibility(View.GONE);
                        FragTan.commit();
                    }
                }
        );
    }
}

public String getTanNev () {
    System.out.println("WARNING: "+ teszt);
    return teszt;
}
当我意识到bundle为null时,我尝试通过getter传递该列表项,因此我更改了片段代码:

 Jegyek jegyek = new Jegyek();
 String jegy = jegyek.getTanNev();

但这并没有解决我的问题,所以我回到捆绑包,它也有一些问题,但我找不到它。有趣的是,在OnItemClickListener中,当我吐司该项时,它是正确的并且可以工作,但是当我想在控制台中显示或传递给片段时,该值是空的。

在片段“jegyekAllando”中,您必须从onCreate()中获取字符串,并使用Bundle data=getArguments(),但您创建了新的Bundle。

请遵循以下示例: 在活动中,传递数据,如

Bundle bundle = new Bundle();
bundle.putString("test", "Test Data");
// set in your testFragment Arguments
TestFragment testFragment = new TestFragment();
testFragment.setArguments(bundle);
并从TestFragment接收数据,如

@Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
   String text = getArguments().getString("test");    
   return inflater.inflate(R.layout.fragment, container, false);
}

从“活动”发送数据,目的是:

Bundle bundle = new Bundle();
bundle.putString("edttext", "From Activity");
// set Fragmentclass Arguments
Fragmentclass fragobj = new Fragmentclass();
fragobj.setArguments(bundle);
在Fragment onCreateView方法中:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    String strtext = getArguments().getString("edttext");    
    return inflater.inflate(R.layout.fragment, container, false);
}
希望这有帮助

看看这篇文章
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    String strtext = getArguments().getString("edttext");    
    return inflater.inflate(R.layout.fragment, container, false);
}