2017-01-05 2 views
0

J'ai un listview avec un adaptateur de base personnalisé qui valide certains éléments dans listview. Ce que je veux, c'est quand je clique longtemps sur l'élément de la liste, une boîte de dialogue devrait ouvrir indiquant "Oui" ou "Non" et quand j'appuie sur "Oui", il devrait supprimer cet élément de l'adaptateur.Comment puis-je faire.Comment supprimer l'élément de la liste personnalisée sur un long clic dans android?

Voici le code de l'adaptateur

private static final String TAG = CDealAppListingAdapter.class.getSimpleName(); 
private static final String DEAL_CODE = "DealCode"; 
private static final String HEADER_TEXT = "headerText"; 
private static final String LOGO_PATH = "logoPath"; 
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; 
} 

@SuppressWarnings("deprecation") 
@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_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); 
     viewHolder.mProgress = (ProgressBar) convertView.findViewById(R.id.progressBar3); 
     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(DEAL_CODE, s_oDataset.get(position).getM_szsubHeaderText());// get deal code from deal data storage 
       i.putExtra(HEADER_TEXT, s_oDataset.get(position).getM_szHeaderText());// get deal name from deal dta storage 
       i.putExtra(LOGO_PATH, s_oDataset.get(position).getM_szLogoPath()); 
       v.getContext().startActivity(i); 
      } else { 
       /*here I am getting error*/ 
       CSnackBar.showSnackBarError(v, m_Context.getString(R.string.no_internet_connection), v.getContext()); 
      } 

     } 
    }); 

    CDealAppDatastorage m = s_oDataset.get(position); 
    viewHolder.m_Header.setText(m.getM_szHeaderText()); 
    viewHolder.m_DummyText.setText(m.getM_szDetails()); 
    viewHolder.m_getBtn.setText("GET " + m.getM_szDealValue() + " POINTS");// set deal button text 
    Picasso.with(m_Context).load(m.getM_szLogoPath()).into(viewHolder.m_logoImage, new Callback() { 
     @Override 
     public void onSuccess() { 
      Log.e(TAG, "OnSuccess Called::"); 
      viewHolder.mProgress.setVisibility(View.INVISIBLE); 
     } 

     @Override 
     public void onError() { 
      Log.e(TAG, "OnError Called::"); 
     } 
    }); 

    return convertView; 
} 

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


} 
} 
+2

Mettre en oeuvre onitemlongclicklistener pour votre convertview intérieur classe d'adaptateur et retirer l'élément de la position cliqué à partir de l'ensemble de données. Après cet appel, notifiez d'actualiser la liste. –

+0

code pls ....................... – Vishal

Répondre

0

structure de code de l'échantillon ci-dessous;

listview.setOnItemLongClickListener(new OnItemLongClickListener() { 
       @Override 
       public boolean onItemLongClick(AdapterView<?> arg0, View arg1, 
         int pos, long id) { 
        // TODO Auto-generated method stub 

        //show dialog asking user option to delete or not 
        //On OK click, dataset.remove(position); 
        //adapter.notifyDatasetChanged(); 

        return true; 
       } 
      }); 
+0

où je dois écrire ce code dans la classe ou l'activité adpter – Vishal

+0

Dans votre classe d'activité –

+0

ok an an bouton cliquez sur l'événement à l'intérieur de la classe que je veux envoyer la demande du serveur et sur la base de celui que vous voulez changer la couleur du bouton. comment dois-je faire ça – Vishal

1

Il existe deux façons de retirer un élément en appuyant longuement sur.

1 De classe

listview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
      @Override 
      public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) { 
       return false; 
      } 
     }); 

2 de l'adaptateur

viewHolder.m_getBtn.setOnLongClickListener(new View.OnLongClickListener() { 
       @Override 
       public boolean onLongClick(View view) { 
        return false; 
       } 
      }); 
0

Supprimer l'élément sélectionné de listview arraylist et referesh

s_oDataset.remove(youritemPostion); 

notifyDataSetChanged(); 

après avoir cliqué sur YES

0
lv.setOnItemLongClickListener(new OnItemLongClickListener() { 
     @Override 
     public boolean onItemLongClick(AdapterView<?> arg0, View arg1, 
       int pos, long id) { 
      // TODO Auto-generated method stub 
      //call Dialog builder class here. 

     } 
    }); 

setOnItemLongClickListener premier appel et à l'intérieur de cette classe de Dialogbuilder d'appel et à l'intérieur que le constructeur dialogue Définir vos boutons sur cette boîte de dialogue à l'aide .setPositiveButton ou méthodes .setNegativeButton