android自定义列表长图,长按时突出显示自定义列表视图项

博客讲述了如何在Android中创建一个自定义的ImageView和TextView,并实现ListView的多选模式。作者在ListFragment中设置了长按监听和多选模式监听,但在长按时项目未突出显示。问题可能在于长按事件的处理。博客提供了代码示例,包括ListFragment和自定义Adapter的实现,以及ActionMode的使用。
摘要由CSDN通过智能技术生成

我创建了一个自定义ImageView ,右侧是TextView 。 并使用操作actionbar上下文菜单实现多选Listview 。

问题是,当我长时间点击某个项目时,它没有突出显示。

以下是我在ListFragment设置listview的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 { 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

使用getActivity()就足够了

setListAdapter(new CustomPasswordsList(getActivity(), titles));

您需要覆盖onItemCheckedStateChanged

public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) { final int checkedCount = getListView().getCheckedItemCount(); // get checked items count

从样品中抽取@

android-sdk-linux/samples/android-17/ApiDemos/src/com/example/android/apis/view/List16

示例:根据您的需要修改以下内容

public class MainActivity extends ListActivity { String[] GENRES = new String[] { "Action", "Adventure", "Animation", "Children", "Comedy", "Documentary", "Drama", "Foreign", "History", "Independent", "Romance", "Sci-Fi", "Television", "Thriller" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ListView lv = getListView(); lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); lv.setMultiChoiceModeListener(new ModeCallback()); setListAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_activated_1, GENRES)); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); getActionBar().setSubtitle("Long press to start selection"); } private class ModeCallback implements ListView.MultiChoiceModeListener { public boolean onCreateActionMode(ActionMode mode, Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.list_select_menu, menu); mode.setTitle("Select Items"); return true; } public boolean onPrepareActionMode(ActionMode mode, Menu menu) { return true; } public boolean onActionItemClicked(ActionMode mode, MenuItem item) { switch (item.getItemId()) { case R.id.share: Toast.makeText(MainActivity.this, "Shared " + getListView().getCheckedItemCount() + " items", Toast.LENGTH_SHORT).show(); mode.finish(); break; default: Toast.makeText(MainActivity.this, "Clicked " + item.getTitle(), Toast.LENGTH_SHORT).show(); break; } return true; } public void onDestroyActionMode(ActionMode mode) { } public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) { final int checkedCount = getListView().getCheckedItemCount(); switch (checkedCount) { case 0: mode.setSubtitle(null); break; case 1: mode.setSubtitle("One item selected"); break; default: mode.setSubtitle("" + checkedCount + " items selected"); break; } } } }

list_select_menu.xml

快照

sdmNi.png

因为您怀疑它是否适用于自定义适配器

wNaHv.png

编辑:

在res / values-v11 / styles.xml下

在根元素添加的自定义布局中

style="@style/activated"

在列表行的布局文件中设置(在顶级组件中,通常是LinearLayout或RelativeLayout):

机器人:背景= “机器人:ATTR / activatedBackgroundIndicator”

要了解它的确切function,请查看其他问题 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值