Mettez en surbrillance l'élément ListView personnalisé lorsque vous cliquez longuement
J'ai créé une coutume listview
qui a un ImageView
sur la gauche et un TextView
sur la droite. Et la mise en œuvre d'une multi-sélection Listview
avec actionbar
menu contextuel.
Le problème c'est que quand je clic sur un élément, il n'a pas à se mis en évidence.
Voici comment j'ai paramétré le listview
dans mon ListFragment
PasswordsFragment.java
package mohd.itcs.safewallet;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AbsListView.MultiChoiceModeListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ListView;
public class PasswordsFragment extends ListFragment {
private String titles[] = { "item1", "item2", "item3" };
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setListAdapter(new CustomPasswordsList(getActivity(), titles));
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
/*
* Setup Multiple Selection Mode
*/
getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
getListView().setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> listview, View item,
int position, long id) {
getListView().setItemChecked(position, true);
return true;
}
});
getListView().setMultiChoiceModeListener(new MultiChoiceModeListener() {
@Override
public boolean onActionItemClicked(ActionMode arg0, MenuItem arg1) {
//TODO Auto-generated method stub
return false;
}
/*
* Inflate Actionbar Menu for Passwords Multiple Selection
*/
@Override
public boolean onCreateActionMode(ActionMode arg0, Menu menu) {
getActivity().getMenuInflater().inflate(
R.menu.passwords_context_menu, menu);
return true;
}
@Override
public void onDestroyActionMode(ActionMode arg0) {
}
@Override
public boolean onPrepareActionMode(ActionMode arg0, Menu arg1) {
return false;
}
@Override
public void onItemCheckedStateChanged(ActionMode actionMode,
int position, long id, boolean arg3) {
/*
* Change Title bar to number of selection
*/
int checkedItems = getListView().getCheckedItemCount();
actionMode.setTitle(String.valueOf(checkedItems) + " Selected");
}
});
}
}
CustomPasswordsList.java
package mohd.itcs.safewallet;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class CustomPasswordsList extends ArrayAdapter<String> {
private final Context context;
private final String values[];
public CustomPasswordsList(Context context, String[] values)
{
super(context, R.layout.password_list_item, values);
this.context = context;
this.values = values;
}
public View getView(int position, View convertView, ViewGroup parent)
{
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.password_list_item, parent, false);
TextView passwordTitle = (TextView) rowView.findViewById(R.id.textView_passwordTitle);
ImageView passwordIcon = (ImageView) rowView.findViewById(R.id.imageView_passwordIcon);
passwordTitle.setText(values[position]);
passwordIcon.setImageResource(R.drawable.facebook);
return rowView;
}
}
passwords_list_item
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="1"
android:orientation="horizontal" >
<ImageView
android:id="@+id/imageView_passwordIcon"
android:layout_height="60dp"
android:contentDescription="@string/imageView_passwordIcon"
android:layout_width="60dp" />
<TextView
android:id="@+id/textView_passwordTitle"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:paddingLeft="10dp"
android:paddingTop="15dp"
android:textSize="16sp"
android:textColor="#000000"
android:layout_weight="1" />
</LinearLayout>
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
à l'aide de
getActivity()
est assezVous avez besoin de remplacer
onItemCheckedStateChanged
Dessin à partir des échantillons @
Exemple : Modifier le ci-dessous en fonction de vos besoins
list_select_menu.xml
Snap shot
Puisque vous douter que ce serait avec la coutume adaptateur
Edit:
en vertu de res/values-v11/styles.xml
Dans la mise en page personnalisée pour l'élément racine ajouter
Définie dans le fichier de mise en page de votre liste de ligne (dans le haut niveau composant, généralement un LinearLayout ou RelativeLayout):
android:background="?android:attr/activatedBackgroundIndicator"
De comprendre ce qu'il fait exactement, cochez cette autre question.