我正在尝试从recyclerview适配器打开一个新片段 但当我点击该项目时...我的应用程序崩溃
我尝试了一些解决方案,但它们没有用 而且我完全是编码和安卓的新手
这是我的适配器类
public class RecyclerViewDataAdapter extends RecyclerView.Adapter<RecyclerViewDataAdapter.ViewHolder> {
private Context context;
public ImageLoader mImageLoader;
//List of superHeroes
List<ListOfData> superHeroes;
public RecyclerViewDataAdapter(List<ListOfData> superHeroes, Context context) {
super();
//Getting all the superheroes
this.superHeroes = superHeroes;
this.context = context;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.recyclerview_row, parent, false);
ViewHolder viewHolder = new ViewHolder(v);
return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
ListOfData superHero = superHeroes.get(position);
mImageLoader = MyApplication.getInstance().getImageLoader();
mImageLoader.get(superHero.getImageUrl(), ImageLoader.getImageListener(holder.imageView1, R.mipmap.ic_launcher, android.R.drawable.ic_dialog_alert));
holder.imageView1.setImageUrl(superHero.getImageUrl(), mImageLoader);
holder.textViewName1.setText(superHero.getName());
//holder.textViewName2.setText(superHero.getName());
//holder.textViewRank.setText(String.valueOf(superHero.getRank()));
//holder.textViewRealName.setText(superHero.getRealName());
//holder.textViewCreatedBy.setText(superHero.getCreatedBy());
//holder.textViewFirstAppearance.setText(superHero.getFirstAppearance());
//String powers = "";
/* for(int i = 0; i<superHero.getPowers().size(); i++){
powers+= superHero.getPowers().get(i);
}*/
//holder.textViewPowers.setText(powers);
holder.imageView1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
BehindTheLayoutFragment fragment = new BehindTheLayoutFragment();
FragmentTransaction ft = ((AppCompatActivity)context).getFragmentManager().beginTransaction();
ft.replace(R.id.behind_the_layout_fragment, fragment);
ft.addToBackStack(null);
ft.commit();
//((AppCompatActivity)context).getFragmentManager().beginTransaction().replace(R.id.behind_the_layout_fragment, fragment).commit();
}
});
}
@Override
public int getItemCount() {
return superHeroes.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
public NetworkImageView imageView1;
public TextView textViewName1;
public TextView textViewName2;
public TextView textViewRank;
public TextView textViewRealName;
public TextView textViewCreatedBy;
public TextView textViewFirstAppearance;
public TextView textViewPowers;
public ViewHolder(View itemView) {
super(itemView);
imageView1 = (NetworkImageView) itemView.findViewById(R.id.thumbnail);
textViewName1 = (TextView) itemView.findViewById(R.id.category_title_one);
/* textViewRank= (TextView) itemView.findViewById(R.id.textViewRank);
textViewRealName= (TextView) itemView.findViewById(R.id.textViewRealName);
textViewCreatedBy= (TextView) itemView.findViewById(R.id.textViewCreatedBy);
textViewFirstAppearance= (TextView) itemView.findViewById(R.id.textViewFirstAppearance);
textViewPowers= (TextView) itemView.findViewById(R.id.textViewPowers);
*/
}
}
}
这里是logcat
05-10 19:06:51.637 18514-18514/com.example.aninesoft.meltwishbeta E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.aninesoft.meltwishbeta, PID: 18514
java.lang.NullPointerException
at com.aninesoft.meltwishbeta.RecyclerViewDataAdapter$1.onClick(RecyclerViewDataAdapter.java:83)
at android.view.View.performClick(View.java:4446)
at android.view.View$PerformClick.run(View.java:18437)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5413)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:970)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:786)
at dalvik.system.NativeStart.main(Native Method)
这里是我调用适配器的类
public class Pants extends Fragment {
//Creating a List of superheroes
public Context context;
public List<ListOfData> listSuperHeroes;
//Creating Views
private RecyclerView recyclerView;
private GridLayoutManager glm;
private RecyclerView.Adapter adapter;
public Pants() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.tshirts_pants_shirts, container, false);
recyclerView = (RecyclerView) view.findViewById(
R.id.recycler_view);
recyclerView.setLayoutManager(new GridLayoutManager(context, 2));
//Calling method to get data
getData();
return view;
}
private void getData() {
//Showing a progress dialog
final ProgressDialog loading = ProgressDialog.show(getActivity(), "Loading Data", "Please wait...", false, false);
//Creating a json array request
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(ProductConfig.DATA_URL,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
//Dismissing progress dialog
loading.dismiss();
//calling method to parse json array
parseData(response);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
//Creating request queue
RequestQueue requestQueue = Volley.newRequestQueue(getActivity());
//Adding request to the queue
requestQueue.add(jsonArrayRequest);
}
//This method will parse json data
private void parseData(JSONArray array) {
listSuperHeroes = new ArrayList<>();
for (int i = 0; i < array.length(); i++) {
ListOfData superHero = new ListOfData();
JSONObject json = null;
try {
json = array.getJSONObject(i);
superHero.setImageUrl(json.getString(ProductConfig.TAG_IMAGE_URL));
superHero.setName(json.getString(ProductConfig.TAG_NAME));
/*superHero.setRank(json.getInt(ProductConfig.TAG_RANK));
superHero.setRealName(json.getString(ProductConfig.TAG_REAL_NAME));
superHero.setCreatedBy(json.getString(ProductConfig.TAG_CREATED_BY));
superHero.setFirstAppearance(json.getString(ProductConfig.TAG_FIRST_APPEARANCE));
*/
ArrayList<String> powers = new ArrayList<String>();
JSONArray jsonArray = json.getJSONArray(ProductConfig.TAG_POWERS);
for (int j = 0; j < jsonArray.length(); j++) {
powers.add(((String) jsonArray.get(j)) + "\n");
}
superHero.setPowers(powers);
} catch (JSONException e) {
e.printStackTrace();
}
listSuperHeroes.add(superHero);
}
adapter = new RecyclerViewDataAdapter(listSuperHeroes, context);
//Adding adapter to recyclerview
recyclerView.setAdapter(adapter);
//Initializing our superheroes list
}
}
这是xml
<FrameLayout
android:id="@+id/behind_the_layout_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingLeft="2dp"
android:paddingRight="2dp"
android:paddingTop="2dp"
android:weightSum="100">
<ImageView
android:id="@+id/iv_men"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:src="@drawable/mens_wear">
</ImageView>
<ImageView
android:id="@+id/iv_women"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="10dp"
android:adjustViewBounds="true"
android:src="@drawable/womens_wear">
</ImageView>
<ImageView
android:id="@+id/iv_other"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="10dp"
android:adjustViewBounds="true"
android:src="@drawable/ic_launcher">
</ImageView>
</LinearLayout>
</ScrollView>
</FrameLayout>
答案 0 :(得分:1)
在Pants
片段中,我没有看到context
已初始化。只需使用
getActivity()
代替您Pants Fragment
中所有地方的背景信息。可以使用getActivity()
方法在片段上下文中找到它。
答案 1 :(得分:-1)
使用它 FragmentTransaction ft = getActivity()。getFragmentManager()。beginTransaction();