1

そのため、別のフラグメントでボタンをクリックした後、EditTextフィールドにテキストを追加した後、あるフラグメントにListViewを設定しようとしています。

私のJavaコーディングスキルはかなり悪いので、コードの提案は私に大いに役立ちます。

これが理にかなっていることを願っています。

これが私のコードです。

public class FieldsActivity extends FragmentActivity {
private static final int NUMBER_OF_PAGES = 3;
ViewPager mPager;
MyFragmentPagerAdapter mMyFragmentPagerAdapter;
ArrayList<String>siteList = new ArrayList<String>();
CustomAdapter ca = null;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
    setContentView(R.layout.fields);
    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.topbar);
    mPager = (ViewPager) findViewById(R.id.fieldspager);
    mMyFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
    mPager.setAdapter(mMyFragmentPagerAdapter);
    mPager.setCurrentItem(1);
}

私のListViewはどこにありますか。

public  class AddSite extends Fragment {
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        RelativeLayout mRelativeLayout = (RelativeLayout) inflater.inflate(R.layout.add_site, container, false);
        Button addSiteButton = (Button) mRelativeLayout.findViewById(R.id.addSiteButton);
        addSiteButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                 mPager.setCurrentItem(2, true);
             }
        });

        ListView lv = (ListView) findViewById(android.R.id.list);
        CustomAdapter ca = new CustomAdapter();
        lv.setAdapter(ca);
        return mRelativeLayout;
    }

    class CustomAdapter extends ArrayAdapter<String> {
        CustomAdapter() {
            super(FieldsActivity.this, android.R.layout.simple_list_item_1, siteList);
        }

        public View getView(int position, View convertView, ViewGroup parent) {
            View row = convertView;

            if (row == null) {
                LayoutInflater inflater=getLayoutInflater();
                row = inflater.inflate(R.layout.list_row, null);
            }
           ((TextView)row.findViewById(R.id.textViewId)).setText(siteList.get(position));
        }
        return row;
    }
}

ButtonとEditTextはどこにありますか。

public class CreateSite extends Fragment {

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        RelativeLayout mRelativeLayout = (RelativeLayout) inflater.inflate(R.layout.main, container, false);
        final EditText siteEditText = (EditText)findViewById(R.id.siteEditText);
        Button signInButton = (Button) mRelativeLayout.findViewById(R.id.sign_in_button);
        signInButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {    //Click this button and add to ListView in class AddSite
                siteList.add(0, siteEditText.getText().toString());
                ca.notifyDataSetChanged(); //(Bundle) cannot be applied
                siteEditText.setText("");
                mPager.setCurrentItem(1, true);
            }
        });
        return mRelativeLayout;
    }
}

すべてがFragmentPagerAdapterにある間

private class MyFragmentPagerAdapter extends FragmentPagerAdapter {

    public MyFragmentPagerAdapter(FragmentManager fm) {
        super(fm);
    }
    @Override
    public Fragment getItem(int position) {
         switch (position) {
            case 0: return new SettingFields();
            case 1: return new AddSite();
            case 2: return new CreateSite();
        }
       return null;
    }
    @Override
    public int getCount() {

        return NUMBER_OF_PAGES;
    }
}

}

だから私は表示されているエラーにコメントしました。

これが理にかなっていることを願っています。他に何か見る必要がある場合はお知らせください。

前もって感謝します!

4

1 に答える 1

1

フラグメントは互いに直接通信してはなりません。代わりに、各フラグメントはアクティビティを報告する必要があり、アクティビティはそのアクションで何をするかを決定できます。

これを行う通常の方法は、Fragment にインターフェイスを定義させ、Activity にそのインターフェイスを実装させることです。次に、フラグメントがアクティビティで呼び出すことができるメソッドがあります。その後、アクティビティは他のフラグメントのメソッドを呼び出して、何らかのアクションを実行させることができます。

フラグメント通信に関するドキュメントを参照してください。

于 2013-01-24T23:14:08.387 に答える