从Activity中将setText设置为Fragment

时间:2015-05-16 11:16:33

标签: java android android-fragments

我徒劳地试图从FormActivity中获取一个值并使用它来填充片段中的EditText。我必须等待活动从远程服务器检索值并用它填充本地SQLite表,这意味着我在片段中尝试过的解决方案没有工作(因为早期没有填充空错误,所以出现空错误)。 我需要帮助。

FormActivity.java的相关部分

public void DrawText() {
        // Fetching user details from sqlite
        HashMap<String, String> user = db.getUserDetails();

        if (user.size() != 0) {
            Log.e(TAG, "string surname: " + surname);

            // Displaying the user details on the fragment

            FirstFragment f1 = new FirstFragment();

            //put info into a bundle to pass to fragments
            Bundle drawbundle = new Bundle();
            drawbundle.putString("surname", surname);

            f1.setArguments(drawbundle);

            FragmentManager FM = getSupportFragmentManager();
            FragmentTransaction FT = FM.beginTransaction();
            FT.add(R.id.something, f1);
            FT.commit();

        }else{
            Log.e(TAG, "table was empty");
        }
    }

    private class MyPagerAdapter extends FragmentPagerAdapter {

        public MyPagerAdapter(FragmentManager fm) {

            super(fm);
        }

        @Override
        public Fragment getItem(int pos) {
            switch(pos) {

                case 0: return FirstFragment.newInstance("@string/form_instruct");
                case 1: return SecondFragment.newInstance("SecondFragment, Instance 1");
                case 2: return ThirdFragment.newInstance("ThirdFragment, Instance 1");
                case 3: return FourthFragment.newInstance("FourthFragment, Instance 1");
                //case 4: return FifthFragment.newInstance("ThirdFragment, Instance 3");
                default: return FirstFragment.newInstance("FirstFragment, Default");

            }
        }

显然,id.something不正确,我不知道如何获取id。我读过我可以使用标签,但我的尝试不起作用。我尝试了以下方法:

FirstFragment fragA = (FirstFragment) getSupportFragmentManager().findFragmentByTag("fragA");

这是我的FirstFragment.java

public class FirstFragment extends android.support.v4.app.Fragment {

    //create variables & Logcat tag
    private static final String TAG = FirstFragment.class.getSimpleName();
    private EditText inputTitle;
    private EditText inputName;
    private EditText inputSurname;
    //private SQLiteHandler db;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_first, container, false);
        TextView tv = (TextView) v.findViewById(R.id.tvFragFirst);
        tv.setText(getArguments().getString("msg"));

        inputSurname = (EditText) getActivity().findViewById(R.id.surnameText);
        inputSurname.setText(getArguments().getString("surname"));

        return v;
    }

    public static FirstFragment newInstance(String text) {

        FirstFragment f = new FirstFragment();
        Bundle b = new Bundle();
        b.putString("msg", text);

        f.setArguments(b);

        return f;
    }

我带着这个圈子走了一圈,有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

如果您使用的是onChange,则可以使用TextView在桌面填满时收到通知,并且在调用ContentProvider时,您可以更新LocalBroadcastManger }。如果您没有使用BroadcastReceiver,则您可以使用for($i=0; $i<sizeof($allTags); $i++) { if($allTags[$i]!='') { $qa_content['custom'.++$c] = '<article>// <div class="custom.." <header><a href="tag/'.urlencode($allTags[$i]).'"><h2>'.$allTags[$i].'</h2></a></header> <div>'.$SameTagsCount[$allTags[$i]].'</div> </article>'; } $allTags来实现相同的目标

答案 1 :(得分:1)

在片段创建访问您的活动后创建界面实现您的片段并在活动中保存您的界面参考,您的操作将使用保存的界面参考完成从活动访问您的方法并更新您的片段。 第二个选项使用标记添加您的片段并使用此片段管理器按标记查找您的片段而不是您的片段参考,而不是简单地在您的活动中调用您的方法