2017-02-05 2 views
0

Я хочу получить общий доступ к классу адаптера класса, используя контекст, но он возвращает null.Не удается получить SharedPreferences в View Adapter возвращает null

То, что я попытался это:

, как я могу получить логин параметр для адаптера в getitemviewtype?

я отредактированный код, сильфонных

любая помощь будет хорошо

import static android.preference.PreferenceManager.getDefaultSharedPreferences; 

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

    private List<Chatt> moviesList; 
    Context context; 
public String loginx; 
    public TextView title, year, genre; 
    public CardView cardViewphoto; 
    public ImageView resim; 
    private static final int TYPE_ITEM0 = 0; 
    private static final int TYPE_ITEM1 = 1; 
    SharedPreferences pref; 
    public class MyViewHolder extends RecyclerView.ViewHolder { 
     public TextView titlem, yearm, genrem; 
     public CardView cardViewphoto; 
     public ImageView resim; 


     public MyViewHolder(View view) { 
      super(view); 

      titlem = (TextView) view.findViewById(R.id.title); 
      genrem = (TextView) view.findViewById(R.id.genre); 
      yearm = (TextView) view.findViewById(R.id.year); 
      resim= (ImageView) view.findViewById(R.id.profile_image); 

     } 

    } 
    class ViewHolder0 extends RecyclerView.ViewHolder { 
     public TextView title, year, genre; 
     public CardView cardViewphoto; 
     public ImageView resim; 


     public ViewHolder0(View v) { 
      super(v); 

      title = (TextView) v.findViewById(R.id.titlesender); 
      genre = (TextView) v.findViewById(R.id.genresender); 
      year = (TextView) v.findViewById(R.id.yearsender); 
      // resim= (ImageView) v.findViewById(R.id.profile_image); 

     } } 



    public ChattAdapter(List<Chatt> moviesList) { 
     this.moviesList = moviesList; 
    } 





    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     context = parent.getContext(); 

     pref =PreferenceManager.getDefaultSharedPreferences(context); 

     //SharedPreferences sharedPreferences = context.getSharedPreferences("FileName", Context.MODE_PRIVATE); 
     loginx = pref.getString("user", null); 
     Log.d("prefsss",loginx.toString()); 
     // login= FirebaseAuth.getInstance().getCurrentUser().toString(); 
     if (viewType == 1){ 
      return new MyViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.chat_list_row, parent, false)); 
     } 
     else{ 

      return new ViewHolder0(LayoutInflater.from(parent.getContext()).inflate(R.layout.chat_list_row2, parent, false)); 

     } 

     // View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.chat_list_row, parent, false); 


     //return new MyViewHolder(itemView); 
    } 

    @Override 
    public int getItemViewType(int position) { 
     // Here you have to write logic for which position have which type of row and return the same 
     Chatt love = moviesList.get(position); 
     Log.d("law",love.getTitle().toString()); 
     Log.d("prefsss",loginx.toString()); 

     //Log.d("law",login); 
     Random r = new Random(); 
     int i1 = r.nextInt(80 - 65) + 65; 
     // pref =PreferenceManager.getDefaultSharedPreferences(context); 

     //SharedPreferences sharedPreferences = context.getSharedPreferences("FileName", Context.MODE_PRIVATE); 
     // login = pref.getString("user", null); 


     if(love.getTitle().equals(loginx)){ 

      return 2; 
     }else{ 


      return 1; 

     } 


    } 
    @Override 
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 




Log.d("lawtayp",String.valueOf(holder.getItemViewType())); 
      if (holder.getItemViewType()==2){ 
       ViewHolder0 viewHolder0 = (ViewHolder0)holder; 
       Chatt love = moviesList.get(position); 

      // viewHolder0.title.setText(love.getTitle()); 
       // viewHolder0.genre.setText(love.getGenre()); 
       viewHolder0.year.setText(love.getYear()); 
       // Picasso.with(getClass()).load("http://barronpw.alwaysdata.net/p/"+name+".png").into(cardViewphoto); 
       // Picasso.with(context).load("http://barronpw.alwaysdata.net/p/"+love.getTitle() +".png").into(viewHolder0.resim); 


      }else{ 


       // code to populate type 1 view here 
       MyViewHolder myviewholder = (MyViewHolder)holder; 
       Chatt love = moviesList.get(position); 

       // Chatt love = moviesList.get(position); 

       // myviewholder.titlem.setText(love.getTitle()); 
       // myviewholder.genrem.setText(love.getGenre()); 
       myviewholder.yearm.setText(love.getYear()); 
       // Picasso.with(getClass()).load("http://barronpw.alwaysdata.net/p/"+name+".png").into(cardViewphoto); 
       Picasso.with(context).load("http://barronpw.alwaysdata.net/p/"+love.getTitle() +"-p.png").into(myviewholder.resim); 
      } 



      // Code to populate type 0 view here 




    } 


    @Override 
    public int getItemCount() { 
     return moviesList.size(); 
    } 
+0

Вы пробовали 'PreferenceManager.getDefaultSharedPreference (контекст);'? –

+0

yes, но он говорит java.lang.NullPointerException: попытка вызвать виртуальный метод 'java.lang.String android.content.Context.getPackageName()' в ссылке нулевого объекта – barann

+0

@barann; why'context.getApplicationContext() '? почему не только «контекст»? –

ответ

0

попробовать этот

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

    private List<Chatt> moviesList; 
    Context context; 
public String loginx; 
    public TextView title, year, genre; 
    public CardView cardViewphoto; 
    public ImageView resim; 
    private static final int TYPE_ITEM0 = 0; 
    private static final int TYPE_ITEM1 = 1; 
    SharedPreferences pref; 
    public class MyViewHolder extends RecyclerView.ViewHolder { 
     public TextView titlem, yearm, genrem; 
     public CardView cardViewphoto; 
     public ImageView resim; 

public ChattAdapter(Context context){ 
     this.context = context; 
} 
.... 

    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     // context = parent.getContext(); 

     pref =PreferenceManager.getDefaultSharedPreferences(context); 
.... 

} 
0

Вопрос заключается в том контексте, который должен быть в пределах приложения, так что общий предпочтения может быть прочитан правильно. Один из способов сделать это - передать контекст активности/фрагмента в качестве дополнительного аргумента адаптеру с конструктором.

0

Сделать конструктор:

public ChattAdpater(Context context){ 
    prefs = PreferenceManager.getDefaultSharedPreferences(context); 
    } 

удалить PREFS инициализацию из onCreateViewHolder

Смежные вопросы