【问题标题】:How to bring up Adapter to Fragment?如何调出适配器到片段?
【发布时间】:2015-09-20 00:09:35
【问题描述】:

我正在使用 3 个选项卡,每个选项卡都有片段。我需要将此活动带到选项卡的片段中。这可能吗?

public class MActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.grid_layout);
    GridView gridView = (GridView) findViewById(R.id.grid_view);
    gridView.setAdapter(new ImageAdapter(this));
}

}

public class FragmentTab1 extends Fragment {

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

    View rootView = inflater.inflate(R.layout.grid_layout, container, false);
    GridView gridView = (GridView) getActivity().findViewById(R.id.grid_view);


    return rootView;
}

有人可以帮我编辑片段类以从适配器中获取活动吗? 谢谢

【问题讨论】:

    标签: android android-fragments android-activity adapter


    【解决方案1】:

    here.得到正确答案

        public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.tab_1,container,false);
        GridView gridView = (GridView) view.findViewById(R.id.grid_view);
        gridView.setAdapter(new ImageAdapter(view.getContext()));
        return view;
    }
    

    【讨论】:

      【解决方案2】:

      如果我对您的问题的理解是正确的,一种方法是通过 ViewPager Adapter 和 Fragments 的构造函数传递活动/上下文对象。

      【讨论】:

      • 我也在寻找片段的更正代码。
      • 嗨..他的意思是你只需要添加一个参数化的构造函数。如果答案很明显,我认为答案不需要明确的代码
      • 片段需要没有参数构造函数来重新创建它们,例如关于屏幕旋转。除非片段被保留,否则您将丢失所有未通过onSaveInstanceState 机制保存的内容。
      【解决方案3】:

      一个不太干净但最简单的方法是这样做:

       public class FragmentTab1 extends Fragment {
      
          @Override
          public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                   Bundle savedInstanceState) {
      
              View rootView = inflater.inflate(R.layout.tab_1, container, false);
              activityAdapter = (MActivity)getActivity().getImageAdapter();
              return rootView;
          }
      

      在您的活动中公开适配器吸气剂->

      public class MActivity extends Activity {
      
          private ImageAdapter adapter;
      
          @Override
          public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.grid_layout);
              GridView gridView = (GridView) findViewById(R.id.grid_view);
              this.adapter = new ImageAdapter(this);
              gridView.setAdapter(this.adapter);
          }
      
          public ImageAdapter getImageAdapter(){
              return this.adapter;
          }
      }
      

      第二种方法是在您的片段中创建一个构造函数,以便在构建片段时接收适配器对象。 (这将是一个更干净的对象)

      【讨论】:

      • 我在activityAdapter = (MAcitivity)getActivity().getImageAdapter(); 收到错误,错误在acitivityAdaptergetImageAdapter
      • 尝试强制使用括号。它应该工作 - ((MActivity)getActivity()).getImageAdapter()
      • 仍然activityAdapter 错误未修复,现在我从第一个括号的开头到getActivity()) 得到红色下划线,因为错误显示cannot cast 'android.support.v4.app.FragmentActivity' to com.example.app.MActivity
      • 好的..那么我建议您遵循其他答案..使用构造函数方法
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-11
      • 2018-02-19
      • 1970-01-01
      • 1970-01-01
      • 2017-02-04
      • 2020-06-13
      • 1970-01-01
      相关资源
      最近更新 更多