android - 在 Activity 和 Fragment 之间传递数据

标签 android android-fragments android-bundle

我想使用 Bundle 将数据从 Activity 传递到 Fragment(我使用 Bundle 在 2 个 Fragment 之间传递数据,这很有效)。 在我的 Activity 中,我有一个 ListView,在 OnItemClickListener 中,我想打开一个新的 Fragment,而单击的 Item 通过 Activity 传递给这个 Fragment。但是 Item 是空的,所以基本上什么都没有发送到 Fragment。

这是我的 Activity :

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

还有我的 fragment :

    public class jegyekAllando extends Fragment {

        DB mydb;

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {

            View rootView = inflater.inflate(R.layout.fragment_jegyek_allando, container, false);

           Bundle bundle = new Bundle();
            String tanNev = bundle.getStrin
g("Tantárgy neve");
        Jegyek jegyAct = new Jegyek();
        String tanNevv = jegyAct.getTanNev();
        mydb = new DB(getActivity());
        String jegyAtlag =String.valueOf(mydb.JegyekAtlaga(tanNev));
        String jegyDarab =String.valueOf(mydb.JegyekDarabszama(tanNev));

        return rootView;
    }
    }

当我意识到 bundle 为 null 时,我尝试通过 getter 传递该 List Item,因此我为此更改了 Fragment 代码:

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

但这并没有解决我的问题,所以我回到Bundle,它也有一些问题,但我找不到它。有趣的是,当我 Toast Item 时在 OnItemClickListener 中它是正确的并且可以工作,但是当我想在控制台中显示或传递给 Fragment 时,该值为 null。

最佳答案

从 Activity 发送数据的目的是:

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

希望对你有帮助

关于android - 在 Activity 和 Fragment 之间传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54815753/

相关文章:

android - 改变 double 的格式,如 ***.***,**

android - 一旦所有 EditText 字段不为空,启用按钮

java - RecyclerView notifydatasetchanged 未从 fragment 调用

android - fragment backstack 替换问题

android - 来自 navArgs 的数据(Bundle)在系统杀死和重新创建 Activity(和 Fragment)后是否仍然存在?

android - Webview android无法加载HTML5

android - GL_COLOR_MATERIAL 在 Android 上带有照明

android - 根据触摸事件更改 View

android - 如何将 ArrayAdapter<String> 从 Activity 传递到 Fragment