Java 删除带有弹出菜单的ListView中的元素
基本上,我在解释remove特性时有一个小问题。用户单击ListView中的按钮,弹出菜单,显示“取消好友”、“取消关注”、“消息”和“取消”。当用户单击“取消好友”时,用户想要取消好友限制的好友将被删除 我有三个问题;搜索和删除(略微): 1当用户使用搜索功能时,“取消好友”选项将不可用。如果用户单击取消好友。它什么也不做…Java 删除带有弹出菜单的ListView中的元素,java,android,listview,custom-adapter,popupmenu,Java,Android,Listview,Custom Adapter,Popupmenu,基本上,我在解释remove特性时有一个小问题。用户单击ListView中的按钮,弹出菜单,显示“取消好友”、“取消关注”、“消息”和“取消”。当用户单击“取消好友”时,用户想要取消好友限制的好友将被删除 我有三个问题;搜索和删除(略微): 1当用户使用搜索功能时,“取消好友”选项将不可用。如果用户单击取消好友。它什么也不做… 2当用户尝试搜索一个比以前删除为好友的用户更多的用户时。它实际上会在搜索结果中显示该用户。 3当用户删除一个朋友,然后搜索另一个要删除的朋友时。它会将以前删除的所有好友重
2当用户尝试搜索一个比以前删除为好友的用户更多的用户时。它实际上会在搜索结果中显示该用户。
3当用户删除一个朋友,然后搜索另一个要删除的朋友时。它会将以前删除的所有好友重新添加到列表中 一定是我做错了什么?也许我在存储数据,然后在某种程度上在其他地方重复使用它 我没有从这段代码中得到任何异常。它实际上运行时有一些小故障
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
res = getResources();
searchField = (EditText) findViewById(R.id.EditText01);
list = (ListView) findViewById(android.R.id.list);
//button = (Button)findViewById(R.id.btnFriendList);
list.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
//button.setFocusable(false);
friendList = new ArrayList<Friend>();
nameBlock = res.getStringArray(R.array.names);
descBlock = res.getStringArray(R.array.descriptions);
names = new ArrayList<String>();
for(int i = 0; i < nameBlock.length; i++) {
names.add((String)nameBlock[i]);
}
descr = new ArrayList<String>();
for(int i = 0; i < descBlock.length; i++) {
descr.add((String)descBlock[i]);
}
images = new ArrayList<Integer>();
for(int i = 0; i < imageBlock.length; i++) {
images.add((Integer)imageBlock[i]);
}
//imageBlock = res.getIntArray(R.array.images);
int size = nameBlock.length;
for(int i = 0 ; i < size; i++) {
Log.d("FREINDADD", "Freind Added" + i);
friendList.add(new Friend(names.get(i), descr.get(i), images.get(i)));
}
Log.i("Application", "Application started succesfully...");
adapter = new VirtuAdapter(this);
setListAdapter(adapter);
Log.i("VIRTU", "Count" + adapter.getCount());
//adapter.getCount();
searchField.addTextChangedListener(new TextWatcher()
{
@Override public void afterTextChanged(Editable s) {}
@Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override public void onTextChanged(CharSequence s, int start, int before, int count)
{
friendList.clear();
textlength = searchField.getText().length();
for (int i = 0; i < names.size(); i++)
{
if (textlength <= names.get(i).length())
{
if(names.get(i).toLowerCase().contains(searchField.getText().toString().toLowerCase().trim())) {
Log.i("VirtuFriendList", "List recyling in process... ");
friendList.add(new Friend(names.get(i), descr.get(i), images.get(i)));
}
}
}
AppendList(friendList);
}
});
}
public void AppendList(ArrayList<Friend> freind) {
setListAdapter(new VirtuAdapter(this));
}
public class VirtuAdapter extends BaseAdapter
{
Activity content;
public VirtuAdapter(Activity context)
{
this.content = context;
}
@Override
public int getCount()
{
return friendList.size();
}
@Override
public Object getItem(int position)
{
return friendList.get(position);
}
@Override
public long getItemId(int position)
{
return friendList.size();
}
class ViewHolder {
TextView myTitle;
TextView myDescription;
ImageView myImage;
Button myButton;
ViewHolder(View view) {
myImage = (ImageView)view.findViewById(R.id.imageview);
myTitle = (TextView)view.findViewById(R.id.title);
myDescription = (TextView)view.findViewById(R.id.mutualTitle);
button = (Button)view.findViewById(R.id.btnFriendList);
}
}
@Override
public View getView(final int position, View view, ViewGroup parent)
{
View row = view;
ViewHolder holder = null;
if(row == null)
{
// If it is visible to the user, deploy the row(s) - allocated in local memory
LayoutInflater inflater = (LayoutInflater)content .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.search_list_item, parent, false);
holder = new ViewHolder(row);
row.setTag(holder);
Log.d("VIRTU", "Row deployed...");
}
else
{
// Recycle the row if it is not visible to to the user - store in local memory
holder = (ViewHolder)row.getTag();
Log.d("VIRTU", "Row recycled...");
}
Friend temp = friendList.get(position);
friend = friendList.get(position);
String length = "SIZE:" + adapter.getCount();
System.out.println("SIZE"+ length);
Log.d("VIRTU", length);
// Set the resources for each component in the list
holder.myImage.setImageResource(temp.getImage());
holder.myTitle.setText(temp.getName());
holder.myDescription.setText(temp.getDesc());
((Button)row.findViewById(R.id.btnFriendList)).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PopupMenu pop = new PopupMenu(getApplicationContext(),v);
MenuInflater inflater = pop.getMenuInflater();
inflater.inflate(R.menu.firned_popup_action, pop.getMenu());
friend.setPosition(position);
Toast.makeText(content, "" + position, Toast.LENGTH_SHORT ).show();
pop.show();
pop.setOnMenuItemClickListener(MainActivity.this);
}
});
return row;
}
}
@Override
public boolean onMenuItemClick(MenuItem item) {
int choice = item.getItemId();
switch(choice) {
case R.id.message:
Toast.makeText(getApplicationContext(),"Clicked on Message", Toast.LENGTH_SHORT).show();
break;
case R.id.unfollow:
Toast.makeText(getApplicationContext(),"Clicked on Unfollow", Toast.LENGTH_SHORT).show();
break;
case R.id.unfriend:
Toast.makeText(getApplicationContext(),"Clicked on Unfreind", Toast.LENGTH_SHORT).show();
Friend temp = friendList.get(friend.getPosition());
friendList.remove(temp);
adapter.notifyDataSetChanged();
adapter.notifyDataSetInvalidated();
break;
case R.id.cancel:
Toast.makeText(getApplicationContext(),"Clicked on Cancel", Toast.LENGTH_SHORT).show();
break;
default: break;
}
return false;
}
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
res=getResources();
searchField=(EditText)findViewById(R.id.EditText01);
list=(ListView)findViewById(android.R.id.list);
//按钮=(按钮)findViewById(R.id.btnFriendList);
list.setChoiceMode(ListView.CHOICE\u MODE\u SINGLE);
//按钮。设置可聚焦(假);
friendList=newArrayList();
nameBlock=res.getStringArray(R.array.names);
descBlock=res.getStringArray(R.array.descriptions);
名称=新的ArrayList();
for(int i=0;i 如果(textlength问题在于位置
的存储方式。调用按钮单击侦听器时,位置
值不是单击按钮的行。要获得正确的值,需要在getView()时将位置保存在ViewHolder对象中调用并将您的按钮单击侦听器移动到if(row==null)
块中。无需在每次调用getView()时设置单击侦听器。它只需要在创建布局时设置。若要查看如何执行此操作,请参阅类似问题的答案。尝试使用ArrayAdapter
它将为您带来奇迹;)对不起,我不太明白你的意思?它正在删除ListView中的元素。只有当我搜索某个内容时,事情才会开始变得一团糟。哦,天哪!我已经修复了它,它工作得完美无缺!感谢你5天不懈的编程,终于成功了!你真是太棒了!竖起大拇指!谢谢你