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

时间:2015-06-17 15:00:09

标签: android android-layout listview android-activity android-arrayadapter

我制作了一个包含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;
}
}

5 个答案:

答案 0 :(得分:2)

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

或者您可以直接从布局中调用

yourRelativeLayout.removeView(yourView)

答案 1 :(得分:1)

我建议在Adapter类中使用ArrayList而不是String []。它使删除或编辑View及其后面的相关数据变得更加容易。我使用this post将String []转换为ArrayList,删除该项并转换回String []。

这应该适用于按钮点击:

在适配器类中:

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];
 }

答案 2 :(得分:0)

查看GONE的可见性也不会从内存中删除您的视图。具体来说,您是否希望保留未来的观点?

答案 3 :(得分:0)

如果您在列表视图中工作,则应拨打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();
            }
        });

答案 4 :(得分:-1)

如果您希望视图消失:

yourView.setVisibility(View.GONE);

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