2016-08-23 2 views
1

Ich habe eine Klasse als CSnackBar implementiert enthält Snackbar Implementierung und ich habe eine Aktivität namens "A", die Listview enthalten und mit Adapter davon als "A Adapter" Ich habe Click-Ereignis in Adapter-Klasse implementiert ... Szenario ist wie Ich möchte prüfen, ob das Internet verfügbar ist oder nicht, wenn ja, dann möchte ich zu einer anderen Aktivität navigieren und wenn Nein, dann möchte ich eine Snackbar-Nachricht anzeigen ... aber wenn ich versuche, eine Snackbar-Nachricht anzuzeigen Adapter sein gibt mir eine Fehlermeldung: -Wie Snackbar Nachricht in Aktivität zu zeigen?

SnackBar Klasse: -

private static CSnackBar s_m_oCSnackBar;// declare snack bar variable 

    public static CSnackBar getInstance() {// creating Instance of nack bar 
     if (s_m_oCSnackBar == null) { 
      s_m_oCSnackBar = new CSnackBar(); 
      } 
     return s_m_oCSnackBar; 
     } 

    public void showSnackBarError(View v, String message, Context context) { 
     // parametrised constructor 

     Snackbar snack = Snackbar.make(v, "" + message, Snackbar.LENGTH_SHORT); 
     View view = snack.getView(); 
     TextView tv = (TextView) view.findViewById(android.support.design.R.id.snackbar_text); 
     tv.setTextColor(Color.WHITE); 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) 
      tv.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); 
     else 
      tv.setGravity(Gravity.CENTER_HORIZONTAL); 
     ColoredSnackbar.alert(snack).show(); 
    } 

    public void showSnackBarSuccess(View v, String message, Context context) { 

     Snackbar snack = Snackbar.make(v, "" + message, Snackbar.LENGTH_SHORT); 
     View view = snack.getView(); 
     TextView tv = (TextView) view.findViewById(android.support.design.R.id.snackbar_text); 
     tv.setTextColor(Color.WHITE); 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) 
      tv.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); 
     else 
      tv.setGravity(Gravity.CENTER_HORIZONTAL); 
     ColoredSnackbar.confirm(snack).show(); 
    } 


Adapter class code for Onclick:- 

    private final Context m_Context;// declaring context variable 
    private final ArrayList<CDealAppDatastorage> s_oDataset;// declaring array list ariable 

    public CDealAppListingAdapter(Context m_Context, ArrayList<CDealAppDatastorage> mDataList) { 
     this.m_Context = m_Context; 
     s_oDataset = mDataList; 
    } 

    @Override 
    public int getCount() {// get total arraylist size 
     return s_oDataset.size(); 
    } 

    @Override 
    public Object getItem(int position) {// get item position in array list 
     return s_oDataset.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @SuppressLint({"SetTextI18n", "InflateParams"}) 
    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     final ViewHolder viewHolder; 
     if (convertView == null) { 
      viewHolder = new ViewHolder(); 
      convertView = inflater.inflate(R.layout.deallisting_card_view, null); 
      viewHolder.m_Header = (TextView) convertView.findViewById(R.id.headingText); 
      viewHolder.m_Subheader = (TextView) convertView.findViewById(R.id.subHeaderText); 
      viewHolder.m_DummyText = (TextView) convertView.findViewById(R.id.subHeadingText); 
      viewHolder.m_logoImage = (ImageView) convertView.findViewById(R.id.appImage); 
      viewHolder.m_getBtn = (Button) convertView.findViewById(R.id.getDealBtn); 
      convertView.setTag(viewHolder); 

     } else { 
      viewHolder = (ViewHolder) convertView.getTag(); 
     } 
     viewHolder.m_getBtn.setOnClickListener(new View.OnClickListener() {// onclick getDeal Btn 
      @Override 
      public void onClick(View v) {//send to deal detail page onclick getDeal Btn 
       if (NetworkUtil.isConnected(m_Context)){ 
        Intent i = new Intent(v.getContext(), CDealAppListingDetails.class); 
        i.putExtra("DealCode", s_oDataset.get(position).getM_szsubHeaderText());// get deal code from deal data storage 
        i.putExtra("headerText", s_oDataset.get(position).getM_szHeaderText());// get deal name from deal dta storage 
        v.getContext().startActivity(i); 
       }else { 
        /*here I am getting error*/CSnackBar.getInstance().showSnackBarError(v.findViewById(R.id.mainLayout),"No Internet connection available",m_Context); 
       } 

      } 
     }); 
     CDealAppDatastorage m = s_oDataset.get(position); 
     viewHolder.m_Header.setText(m.getM_szHeaderText()); 
     viewHolder.m_Subheader.setText(m.getM_szsubHeaderText()); 
     viewHolder.m_getBtn.setText("GET " + m.getM_szDealValue() + " POINTS");// set deal button text 
     viewHolder.m_logoImage.setImageResource(m.getM_n_Image());// set deal logo 

     String source = "Dummy text is text that is used in the publishing industry or by web designers to occupy space."; 
     viewHolder.m_DummyText.setText(Html.fromHtml(source)); 

     return convertView; 
    } 

    private class ViewHolder { 
     public TextView m_Header, m_Subheader, m_DummyText; 
     public ImageView m_logoImage; 
     public Button m_getBtn; 
    } 
} 

Hier Protokollfehler: -

Process: com.example.devui1.rewardapp, PID: 11205 
java.lang.NullPointerException 
at android.support.design.widget.Snackbar.<init>(Snackbar.java:188) 
at android.support.design.widget.Snackbar.make(Snackbar.java:220) 
at com.example.devui1.rewardapp.snackbar.CSnackBar.showSnackBarError(CSnackBar.java:26) 
at com.example.devui1.rewardapp.adapter.CDealAppListingAdapter$1.onClick(CDealAppListingAdapter.java:78) 
+0

Add Fehlerprotokolle setzen auch –

+0

sehen über ......................... – Raghav

+0

versuche nur 'v' in snackbar statt' findViewById' –

Antwort

2

Diese Linie ist Ihr Problem

/*here I am getting error*/CSnackBar.getInstance().showSnackBarError(v.findViewById(R.id.mainLayout),"No Internet connection available",m_Context); 

Die Variable v stellt die Button Sie geklickt haben. A Button stammt nicht von ViewGroup daher kann es keine Kinder haben. Daher gibt findViewById Null zurück, die Sie in die make-Funktion von SnackBar übergeben. Wenn Sie das Haupt-Layout übergeben möchten, müssen Sie auf diese Dieses

CSnackBar.getInstance().showSnackBarError(findViewById(R.id.mainLayout),"No Internet connection available",m_Context); 

diese Zeile ändern wird versuchen, eine View mit id mainLayout im Layout finden Sie setContentView

Verwandte Themen