2016-12-07 5 views
0

私のアプリケーションでフラグメント付きビューポケベルを使用しています。私は追加し、任意のキー/値をハッシュマップから削除したいが、それは私にnullポインタの例外を与える。最後のキーをマップから削除すると、ハッシュマップに5つの要素があります。それを解決する方法。以下 は私の問題のコードです:あなただけのnullポインタ例外を削除したい場合は、その後、これを追加し、view-pagerフラグメントからハッシュマップのキーと値のペアを追加および削除する方法

Iterator<Map.Entry<String,String>> iter = TestMap.entrySet().iterator(); 
while (iter.hasNext()) { 
    Map.Entry<String,String> entry = iter.next(); 
    if("Sample".equalsIgnoreCase(entry.getValue())){ 
     iter.remove(); 
    } 
} 

public class MainActivity extends AppCompatActivity { 
    ViewPager viewPager; 
    public PagerAdapter adapter1; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     viewPager = (ViewPager) findViewById(R.id.pager1); 
     final HashMap<String,Integer> sliderDataList = new HashMap<String,Integer>(); 
     sliderDataList.put("0",R.drawable.first); 
     sliderDataList.put("1",R.drawable.second); 
     sliderDataList.put("2",R.drawable.three); 
     sliderDataList.put("3",R.drawable.four); 
     sliderDataList.put("4",R.drawable.xiaomi); 
     adapter1 = new PagerAdapter(getSupportFragmentManager(), sliderDataList, MainActivity.this); 
     viewPager.setAdapter(adapter1); 
     viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
      @Override 
      public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
      } 

      @Override 
      public void onPageSelected(int position) { 
       remove("3"); 
      } 
      @Override 
      public void onPageScrollStateChanged(int state) { 

      } 
     }); 
    } 

    public void remove(String s){ 
     adapter1.remove(s); 
    } 

    public class PagerAdapter extends FragmentStatePagerAdapter { 
     private HashMap<String, Integer> hMap; 
     private final Context context; 

     public PagerAdapter(FragmentManager fm, HashMap<String,Integer> hMap, Context context) { 
      super(fm); 
      this.hMap=hMap; 
      this.context=context; 
     } 
     @Override 
     public int getItemPosition (Object object) 
     { 
      return POSITION_NONE; 
     } 

     @Override 
     public Fragment getItem(int position) { 
      return new SliderFragment(hMap,context,position); 
     } 

     @Override 
     public int getCount() { 
      return hMap.size(); 
     } 

     public void remove(String s){ 
      hMap.remove(s); 
      adapter1.notifyDataSetChanged(); 
       } 
      } 


    @SuppressLint("ValidFragment") 
    public static class SliderFragment extends Fragment { 

     private HashMap<String, Integer> urls; 
     private int imageResourceId; 
     ImageView imageView; 
     private Context ctx; 

     public SliderFragment(HashMap<String,Integer> urls, Context c, int pos) { 
      this.urls = urls; 
      this.imageResourceId = pos; 
      this.ctx = c; 
     } 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { 
      View view = inflater.inflate(R.layout.content_main, container, false); 
      imageView = (ImageView) view.findViewById(R.id.img); 
      imageView.setScaleType(ImageView.ScaleType.FIT_XY); 
      imageView.setImageResource(urls.get(imageResourceId +"")); 
      return view; 
     } 
    } 
} 
+0

はあなたを行います選択したすべてのフラグメントでremove( "3")を呼び出すとしますか? –

+0

いいえ私は任意のキー/値をランダムに削除し、必要なときにはいつでもそれを再度追加します。 –

+0

この方法で呼び出すとこの削除は、フラグメントを選択するたびに呼び出されます –

答えて

0

はこれを試してみてください

if (urls.get(imageResourceId + "") != null) 
      imageView.setImageResource(urls.get(imageResourceId + "")); 
+0

私はそれを試みるが、同じ問題に直面している。 –

0
public void remove(String s){ 

    if(sliderDataList.containskey("3")) 
     { 
     containskey.remove("3"); 
     adapter1.notifydataSetChanged(); 
     } 

} 
+0

まだ同じ問題 –

+0

2つの削除方法があります。別の方法を削除してください。 –

+0

あなたはデバッグを知っていますか? –

関連する問題