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



如何将上下文从fragment传递到适配器?我已经在片段中尝试了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);
}
}

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

public class Men extends Fragment {
RecyclerView my_recyclerView1;
ArrayList<Tab_1_DataActivity> tab1;
Context context;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
context = container.getContext();
//put the rest of your code and put context in place of getContext or getActivity
}
}

使用此代码....

@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);
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;

检查下面的代码

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);
}

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

您可以使用视图持有人上下文

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

'

最新更新