0

Я создал пользовательский вид, который содержит 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; 
} 
} 

ответ

1

Я бы рекомендовал использовать ArrayList вместо String [] в вашем классе адаптера. Это упрощает удаление или редактирование вида и связанных с ним данных. Я использовал this post, чтобы преобразовать вашу строку [] в 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]; 
} 
+0

.java.lang.ArrayIndexOutOfBoundsException: length = 2; index = 2 at com.khurana.nikhil.list1.CustomAdapter.getView (CustomAdapter.java:45) –

+0

Каково утверждение в строке 45 в вашем коде? –

+0

'tv.setText (s1 [position]);' –

-1

Если вы хотите, чтобы вид исчезнуть:

yourView.setVisibility(View.GONE); 

EDIT: Для того, чтобы получить родителя вид кнопки: Android: Making changes to a button's parent view

+0

Это работает на щелчку view.How я установить эту функциональность на нажатие кнопки? –

+0

Установите onClickHandler на кнопку и посмотрите мое редактирование – MD1948

+0

Имейте в виду, что установка видимости вида GONE не удаляет данные из массива String [], которые используются для заполнения списка. –

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

или вы можете позвонить из макета непосредственно

yourRelativeLayout.removeView(yourView) 
0

Посмотреть видимость GONE не удалит ваш взгляд из памяти, а также. Пожалуйста, будьте конкретны, вы хотите сохранить свое мнение на будущее?

+0

Нет, постоянное удаление. –

+0

Вы хотите удалить данные из списка или удалить объект из списка? – Ashutoshg

+0

Ответ Фрэнка сверху справился с задачами. –

0

Если вы работаете в ListView вы должны вызвать 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(); 
      } 
     }); 
+0

Что такое ArrayUtils? Это дает ошибку. –

Смежные вопросы