2つのアクティビティを持つメイン画面があります。いずれもRecyclerViewを持ち、項目をクリックするとこのエラーが発生します。私は変更しようとしました"extend"アクティビティとFragmentActivityの結果が同じです。私はこれのための解決策はありません、多分私はアダプタ全体を変更する必要があります。あなたのソリューションは何ですか?このライン意図意図=新しいテント(getActivity()、HeroShowCase.class)から第3アクティビティ、コンテキストヌルオブジェクトの開始
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
。
これは、あなたの行はエラーをスローして
public class HeroListAdapter extends Fragment{
private class HeroHolder extends RecyclerView.ViewHolder {
private Heroes mHeroes;
public TextView mHeroTextView;
public ImageView mHeroImageView;
public HeroHolder(View heroView){
super(heroView);
itemView.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
Intent intent=new Intent(getActivity(),HeroShowCase.class);
intent.putExtra(MainHeroScreen.EXTRA_HERO_ID,mHeroes.getId());
startActivity(intent);
}
});
mHeroTextView=(TextView) heroView.findViewById(R.id.hero_item_hero_name);
mHeroImageView=(ImageView) heroView.findViewById(R.id.hero_item_hero_icon);
mHeroImageView.setAlpha(196);
}
public void bindHero(Heroes heroes){
mHeroes=heroes;
mHeroImageView.setImageResource(heroes.getHeroPortrait());
mHeroTextView.setText(heroes.getTitle());
}
}
public class HeroAdapter extends RecyclerView.Adapter<HeroHolder>{
private List<Heroes> mHeroes;
public HeroAdapter(List<Heroes> heroes){
mHeroes=heroes;
}
@Override
public HeroHolder onCreateViewHolder(ViewGroup parent, int viewType){
LayoutInflater layoutInflater=LayoutInflater.from(parent.getContext());
View view=layoutInflater.inflate(R.layout.heroes_item,parent,false);
return new HeroHolder(view);
}
@Override
public void onBindViewHolder(HeroHolder holder, int position){
Heroes heroes=mHeroes.get(position);
holder.bindHero(heroes);
}
@Override
public int getItemCount(){
return mHeroes.size();
}
}
}
MainActivity(第二の活動)
public class MainHeroScreen extends Activity{
public static final String EXTRA_HERO_ID="com.example.ferhat.heroesitems_dota2.hero_id";
private RecyclerView mHeroRecyclerView;
private HeroListAdapter.HeroAdapter mHeroAdapter;
private RecyclerView.ItemDecoration mDividerItemDecoration;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.heroes_list_view);
mHeroRecyclerView = (RecyclerView) findViewById(R.id.hero_recycler_view);
mHeroRecyclerView.setHasFixedSize(true);
mHeroRecyclerView.setLayoutManager(new LinearLayoutManager(this));
updateUI();
//İtem arası çizgi
mDividerItemDecoration = new DividerItemDecoration(mHeroRecyclerView.getContext()
,new LinearLayoutManager(this).getOrientation());
mHeroRecyclerView.addItemDecoration(mDividerItemDecoration);
}
public void updateUI() {
HeroLab heroLab = HeroLab.get(this);
List<Heroes> heroes = heroLab.getHeroes();
mHeroAdapter = new HeroListAdapter().new HeroAdapter(heroes);
mHeroRecyclerView.setAdapter(mHeroAdapter);
}
}
AndroidManifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.ferhat.heroesitems_dota2">
<uses-sdk
android:maxSdkVersion="25"
android:minSdkVersion="21"
android:targetSdkVersion="23">
</uses-sdk>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
>
<activity android:name=".MainScreen">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name=".MainHeroScreen"></activity>
<activity android:name=".HeroShowCase"></activity>
<activity android:name=".MainItemScreen"></activity>
</application>
</manifest>
itemViewはどこに宣言されていますか?これは、HeroHolderコンストラクタで使用されます。 –
クラスのネストは私にとって非常に奇妙なようです。 –