将上下文从片段传递到适配器

时间:2017-08-26 11:31:19

标签: android android-fragments

如何将片段中的上下文传递给适配器?我在片段中尝试了 getActivity() getContext(),但没有任何效果。

这是我的代码:

public class Men extends Fragment {

    RecyclerView my_recyclerView1;
    ArrayList<Tab_1_DataActivity> tab1;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        my_recyclerView1 = (RecyclerView) container.findViewById(R.id.tab1_recyclcer);
        my_recyclerView1.setLayoutManager(new LinearLayoutManager(getActivity()));
        tab1 = new ArrayList<>();
        loadData();
        return inflater.inflate(R.layout.activity_tab_1, container, false);
    }

    private void loadData() {
        String tab1_URL = "";
        StringRequest first_tab = new StringRequest(Request.Method.GET, tab1_URL, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                try {
                    JSON HERE...
                    MyAdapter my_recyclerView1Adapter = new MyAdapter(getActivity(), tab1);
                    my_recyclerView1.setAdapter(my_recyclerView1Adapter);

                } catch (JSONException e) {
                    e.printStackTrace();
                    Log.e("MyExeption", "MineJSONException", e);
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Toast.makeText(getActivity(), error.getMessage().toString(), Toast.LENGTH_LONG).show();
            }
        });
        MySingletonActivity.getmInstance(getActivity()).addtoRequest(first_tab);
    }
}

5 个答案:

答案 0 :(得分:1)

使用此代码....

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_tab_1, container, false); // add line
    my_recyclerView1 = (RecyclerView) view .findViewById(R.id.tab1_recyclcer); // change line
    my_recyclerView1.setLayoutManager(new LinearLayoutManager(getActivity())); // change line
    tab1 = new ArrayList<>();
    loadData();
    return view; // change line
}

也改变这些行......

MenAdapter my_recyclerView1Adapter = new MenAdapter(getActivity(), tab1);//change line
                my_recyclerView1.setAdapter(my_recyclerView1Adapter);

答案 1 :(得分:0)

public class ArticleAdapter extends RecyclerView.Adapter<ArticleAdapter.ViewHolder> {

private List <Article> articles;
private int rowLayout;
private Context mContext;
WebView articleView;
private static final int MENU_ITEM_VIEW_TYPE = 0;
private static final int NATIVE_EXPRESS_AD_VIEW_TYPE = 1;



public ArticleAdapter(List<Article> list, int rowLayout, Context context)
{
     this.articles = list;
     this.rowLayout = rowLayout;
     this.mContext = context;
}}

传递像private Context mContext;

这样的上下文

答案 2 :(得分:0)

检查以下代码

private RecyclerView my_recyclerView1;
private ArrayList<Tab_1_DataActivity> tab1;
private MenAdapter my_recyclerView1Adapter

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment, container, false);
}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    my_recyclerView1 = (RecyclerView) view.findViewById(R.id.tab1_recyclcer);
    my_recyclerView1.setLayoutManager(new LinearLayoutManager());
    tab1 = new ArrayList<>();
    loadData();
}

private void loadData() {
    StringRequest first_tab = new StringRequest(Request.Method.GET, tab1_URL, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {

            // your implementation...


            // Use runOnUiThread to avoid cross threading
            getActivity().runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    MenAdapter my_recyclerView1Adapter = new MenAdapter(getActivity(), tab1);
                    my_recyclerView1.setAdapter(my_recyclerView1Adapter);
                }
            });
        }
    }, new Response.ErrorListener() {
        // Your code
    });

    MySingletonActivity.getmInstance(getActivity()).addtoRequest(first_tab);
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    // you can cast this context to activity

}

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

答案 3 :(得分:0)

为什么在适配器中需要特定的活动上下文?

您可以使用viewHolder上下文

@Override
public void onBindViewHolder(MenAdapter.ViewHolder holder, int position) {
 Picasso.with(holder.getContext()).load(tab1.get(position).getProd_img()).into(holder.imageTab1);
}

`

答案 4 :(得分:0)

声明getContext()方法并从容器派生它。

curl -v -X POST -k https://127.0.0.1/api/v1/aaa
相关问题