如何通过单击删除按钮重置整个视图

How to reset the whole View by clicking the delete Button

我制作了一个自定义视图,其中包含一个 ImageView、一个 TextView 和一个删除按钮。
我想在单击与其关联的删除按钮时重置特定视图。
请告诉如何实现这个。

这是我的 MainActivity.java

package com.khurana.nikhil.list1;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity {
ListView lv;
TextView tv1, tv2;
View v1;
public String[] s = {"nikhil", "mukul", "kunal"};
public int[] img = {R.drawable.rty, R.drawable.sf, R.drawable.rty};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ListView lv = (ListView) findViewById(R.id.listView);


    CustomAdapter cad = new CustomAdapter(MainActivity.this, s, img);
    lv.setAdapter(cad);


    lv.setOnItemClickListener(new AdapterView.OnItemClickListener()
    {

        public void onItemClick(AdapterView<?> parent,View v,int position,long id)
        {
            Toast.makeText(MainActivity.this,"You clicked "+s[position],Toast.LENGTH_SHORT).show();

        }

    });


}
} 

这里是CustomAdapter.java

package com.khurana.nikhil.list1;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

public class CustomAdapter extends ArrayAdapter<String>{


Context c1;
String s1[];
int s2[];
CustomAdapter(Context c,String s[],int s3[])
{
    super(c,R.layout.tcustom,s);
    this.c1=c;
    this.s1=s;
    this.s2=s3;



}

public View getView(int position,View v,ViewGroup parent)
{
    LayoutInflater li=(LayoutInflater) c1.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

     v=li.inflate(R.layout.tcustom,null);
    TextView tv=(TextView)v.findViewById(R.id.textView);
    ImageView im=(ImageView)v.findViewById(R.id.imageview);
    tv.setText(s1[position]);
    im.setImageResource(s2[position]);
    Button bt=(Button)v.findViewById(R.id.button);
    return v;
}
}

如果您希望视图消失:

yourView.setVisibility(View.GONE);

编辑:获取按钮的父视图:Android: Making changes to a button's parent view

((LinearLayout)yourView.getParent()).removeView(yourView);

或者直接从布局调用

yourRelativeLayout.removeView(yourView)

视图对 GONE 的可见性也不会从内存中删除您的视图。请具体一点,你想保留你的观点以备将来使用吗?

我建议在您的适配器 class 中使用 ArrayList 而不是 String[]。它使删除或编辑视图及其背后的关联数据变得容易得多。我使用 this post 将您的 String[] 转换为 ArrayList,删除项目并转换回 String[]。

这应该在按钮点击时起作用:

在您的适配器中 class:

public View getView(int position,View v,ViewGroup parent)
{
    LayoutInflater li=(LayoutInflater) c1.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    v=li.inflate(R.layout.tcustom,null);
    TextView tv=(TextView)v.findViewById(R.id.textView);
    ImageView im=(ImageView)v.findViewById(R.id.imageview);
    tv.setText(s1[position]);
    im.setImageResource(s2[position]);

    Button bt=(Button)v.findViewById(R.id.button);
    bt.setTag(position); //important so we know which item to delete on button click

    bt.setOnClickListener(new View.OnClickListener() {
     public void onClick(View v)
      {
        int positionToRemove = v.getTag(); //get the position of the view to delete stored in the tag
        removeItem(positionToRemove); //remove the item
      } 
    });

    return v;
}

public void removeItem(int position){
 //convert array to ArrayList, delete item and convert back to array
  ArrayList<String> a = new ArrayList<>(Arrays.asList(s1));
  a.remove(i);
  strings = new String[a.size()];
  s1= a.toArray(strings);
  notifyDataSetChanged(); //refresh your listview based on new data
}

 @Override
 public int getCount() {
   return s1.length;
 }

 @Override
 public String getItem(int position) {
   return s1[position];
 }

如果您在列表视图中工作,您应该调用 notifyDataSetChanged() 适配器。你的 getView() 方法可以是这样的: 按钮上的动作可以是这样的

Button bt=(Button)v.findViewById(R.id.button);
bt.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

              s1 = ArrayUtils.remove(s1, position);
              s2 = ArrayUtils.remove(s2, position);
              notifyDataSetChanged();
            }
        });