2015-03-09 2 views
0

Я хочу открыть DialogBox при нажатии на RecyclerView, и этот RecyclerView использовал пользовательский адаптер. Я написал открытый код DialogBox в адаптере, но при запуске приложения возникла ошибка.Открыть DialogBox в адаптере

мой адаптер код:

public class CardViewDataAdapter_smiley extends RecyclerView.Adapter<CardViewDataAdapter_smiley.ViewHolder> { 
public String[] mDataset; 
static public Context context; 


// Provide a suitable constructor (depends on the kind of dataset) 
public CardViewDataAdapter_smiley(String[] myDataset) { 
    this.mDataset = myDataset; 
} 

// Create new views (invoked by the layout manager) 
@Override 
public CardViewDataAdapter_smiley.ViewHolder onCreateViewHolder(ViewGroup parent, 
                   int viewType) { 
    // create a new view 
    View itemLayoutView = LayoutInflater.from(parent.getContext()).inflate(
      R.layout.cardview_smiley, null); 

    // create ViewHolder 

    ViewHolder viewHolder = new ViewHolder(itemLayoutView); 
    return viewHolder; 
} 

// Replace the contents of a view (invoked by the layout manager) 
@Override 
public void onBindViewHolder(ViewHolder viewHolder, int position) { 

    // - get data from your itemsData at this position 
    // - replace the contents of the view with that itemsData 

    viewHolder.tvtinfo_text.setText(mDataset[position].toString()); 
    viewHolder.versionName = mDataset[position]; 
} 

// Return the size of your dataset (invoked by the layout manager) 
@Override 
public int getItemCount() { 
    return mDataset.length; 
} 

// inner class to hold a reference to each item of RecyclerView 
public static class ViewHolder extends RecyclerView.ViewHolder { 

    public TextView tvtinfo_text; 
    public String versionName; 

    public ViewHolder(View itemLayoutView) { 
     super(itemLayoutView); 
     tvtinfo_text = (TextView) itemLayoutView 
       .findViewById(R.id.cardview_title_smiley); 

     itemLayoutView.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       final Dialog dialog = new Dialog(context); 
       dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
       dialog.setContentView(R.layout.activity_show__sms__dialog); 
       Button close_btn = (Button) dialog.findViewById(R.id.dialog_close_button); 
       close_btn.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         dialog.dismiss(); 
        } 
       }); 
       dialog.show(); 
      } 

     }); 

     itemLayoutView.setOnLongClickListener(new View.OnLongClickListener() { 

      @Override 
      public boolean onLongClick(View v) { 
       Toast.makeText(v.getContext(), "test click: " + versionName, 
         Toast.LENGTH_SHORT).show(); 
       return true; 

      } 
     }); 

    } 

} 

код onClickListener в адаптер:

itemLayoutView.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       final Dialog dialog = new Dialog(context); 
       dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
       dialog.setContentView(R.layout.activity_show__sms__dialog); 
       Button close_btn = (Button) dialog.findViewById(R.id.dialog_close_button); 
       close_btn.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         dialog.dismiss(); 
        } 
       }); 
       dialog.show(); 
      } 

ошибка:

03-09 16:59:53.066 1215-1215/? E/AndroidRuntime﹕ FATAL EXCEPTION: main 
Process: com.tellfa.smsbox, PID: 1215 
java.lang.NullPointerException 
     at android.app.Dialog.<init>(Dialog.java:156) 
     at android.app.Dialog.<init>(Dialog.java:133) 
     at com.tellfa.smsbox.CardViewDataAdapter_smiley$ViewHolder$1.onClick(CardViewDataAdapter_smiley.java:73) 
     at android.view.View.performClick(View.java:4438) 
     at android.view.View$PerformClick.run(View.java:18422) 
     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:5001) 
     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:785) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
     at dalvik.system.NativeStart.main(Native Method) 
+0

Сообщение заявление на линии (CardViewDataAdapter_smiley.java:)73 , –

+0

Вероятно, 'context' является' null' –

+0

В приведенном выше коде отправлен. public void onClick (View v) { final Диалог диалога = новый диалог (контекст); dialog.requestWindowFeature (Window.FEATURE_NO_TITLE); dialog.setContentView (R.layout.activity_show__sms__dialog); Кнопка close_btn = (кнопка) dialog.findViewById (R.id.dialog_close_button); close_btn.setOnClickListener (новый View.OnClickListener() { @Override общественного недействительный OnClick (View v) { dialog.dismiss();} }); dialog.show(); } – Mohammad

ответ

1
@Override 
    public CardViewDataAdapter_smiley.ViewHolder onCreateViewHolder(ViewGroup parent, 
                    int viewType) { 
     // create a new view 
     context = parent.getContext(); 
     View itemLayoutView = LayoutInflater.from(context).inflate(
       R.layout.cardview_smiley, null); 

     // create ViewHolder 

     ViewHolder viewHolder = new ViewHolder(itemLayoutView); 
     return viewHolder; 
    } 
+0

tnx, но показать ошибку в запуске приложения! Вы знаете, как исправить нуль контекста? – Mohammad

+0

жаль, что я вижу, что реальная проблема теперь копирует мой ответ. Ваш контекст имеет значение null, которое установит ваш контекст независимо от того, parent is – Xjasz

+0

Нет, адаптер полностью отделен от активности. Пожалуйста, ознакомьтесь с кодом, чтобы понять мой средний – Mohammad

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