活动:从Fragment接收适配器

时间:2013-08-25 09:10:14

标签: android android-activity android-fragments adapter

我有一个包含EditText和ListFragment的FragmentActivity。 ListFragment中的项目使用适配器填充。我需要在FragmentActivity中获得对该适配器的参考,以便将它用于我的EditText。请参阅//这不适用于代码。

这里是整个代码。我刚刚开始使用Fragments ......

FragmentActivity:

public class XXX extends FragmentActivity implements ListFragmentItemClickListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.xxx_activity);


}

@Override
protected void onStart() {
    super.onStart();

    EditText editText = (EditText) findViewById(R.id.edittext)

    editText .addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
            // THIS DOESN'T WORK -->
            XXXListFragment.this.adapter.getFilter().filter(cs);
            // <-- THIS DOESN'T WORK
        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
        }

        @Override
        public void afterTextChanged(Editable arg0) {
        }
    });

}

@Override
public void onListFragmentItemClick(int position) {

    int orientation = getResources().getConfiguration().orientation;

    if (orientation == Configuration.ORIENTATION_LANDSCAPE) {

        FragmentManager fragmentManager = getSupportFragmentManager();

        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

        Fragment prevFrag = fragmentManager.findFragmentByTag("xxx.details");

        if (prevFrag != null)
            fragmentTransaction.remove(prevFrag);

        XXXDetailsFragment fragment = new XXXDetailsFragment();

        Bundle b = new Bundle();

        b.putInt("position", position);

        fragment.setArguments(b);

        fragmentTransaction.add(R.id.xxx_detail_fragment_container, fragment,
                "xxx.details");

        fragmentTransaction.addToBackStack(null);

        fragmentTransaction.commit();

    } else {
        ...
    }
}

... 
}

ListFragment:

public class XXXListFragment extends ListFragment {

    ListFragmentItemClickListener ifaceItemClickListener;

    public interface ListFragmentItemClickListener {

        void onListFragmentItemClick(int position);
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        try {
            ifaceItemClickListener = (ListFragmentItemClickListener) activity;
        } catch (Exception e) {
            Toast.makeText(activity.getBaseContext(), "Exception", Toast.LENGTH_SHORT).show();
        }
    }

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

        Spanned[] xxx = { Html.fromHtml(getString(R.string.xxx)), ... };

        ArrayAdapter<Spanned> adapter = new ArrayAdapter<Spanned>(inflater.getContext(),
                R.layout.fragment_list_item_appearance, xxx);

        setListAdapter(adapter);

        return super.onCreateView(inflater, container, savedInstanceState);
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {

        ifaceItemClickListener.onListFragmentItemClick(position);

    }

}

ListFragment添加在FragmentActivity布局中:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

...

<EditText
    android:id="@+id/edittext"
    style="@style/red_edittext"
    android:hint="@string/exittext_input_search" />

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >

    <fragment
        android:id="@+id/xxx_list_fragment"
        android:name="com.xxx.XXXListFragment"
        android:layout_width="350dp"
        android:layout_height="wrap_content" />

    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <FrameLayout
            android:id="@+id/xxx_detail_fragment_container"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical" >
        </FrameLayout>
    </ScrollView>
</LinearLayout>

</LinearLayout>

0 个答案:

没有答案