2016-04-28 9 views
-1

削除したい行のボタンを押して、customlistviewから行を削除したいとします。customlistviewから行を削除する方法

adapter.java

public class Adapter extends ArrayAdapter<String> { 

/** VARIABILI */ 
int[] bandiera = {}; 
int[] positivo = {}; 
int[] negativo = {}; 
String[] piatti = {}; 
String[] qta = {}; 
String[] ntavolo = {}; 
Context c; 
LayoutInflater inflater; 
static int cambiobandiera=0; /** SE 0 E' VERDE, SE 1 E' ROSSA 

/** COSTRUTTORE */ 
public Adapter(Context context, String[] piatti, String[] qta, String[] ntavolo, int[] bandiera, 
       int[] positivo, int[] negativo) 
{ 
    super(context, R.layout.rigatabella, piatti); 

    this.c = context; 
    this.piatti = piatti; 
    this.qta = qta; 
    this.ntavolo = ntavolo; 
    this.bandiera = bandiera; 
    this.positivo = positivo; 
    this.negativo = negativo; 
} 

public class ViewHolder 
{ 
    ImageView bandiera; 
    TextView ntavolo; 
    TextView piatto; 
    TextView qta; 
    ImageView positivo; 
    ImageView negativo; 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 

    if(convertView==null) 
    { 
     inflater= (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView=inflater.inflate(R.layout.rigatabella, null); 
    } 

    final ViewHolder holder= new ViewHolder(); 

    /** INZIALIZZO LE VIEWS */ 
    holder.piatto = (TextView) convertView.findViewById(R.id.piatto); 
    holder.ntavolo = (TextView) convertView.findViewById(R.id.ntavolo); 
    holder.qta = (TextView) convertView.findViewById(R.id.qta); 
    holder.bandiera = (ImageView) convertView.findViewById(R.id.bandiera); 
    holder.positivo = (ImageView) convertView.findViewById(R.id.positivo); 
    holder.negativo = (ImageView) convertView.findViewById(R.id.negativo); 

    /** ASSEGNARE I DATI */ 
    holder.bandiera.setImageResource(bandiera[position]); 
    holder.ntavolo.setText(ntavolo[position]); 
    holder.piatto.setText(piatti[position]); 
    holder.qta.setText(qta[position]); 
    holder.positivo.setImageResource(positivo[position]); 
    holder.negativo.setImageResource(negativo[position]); 

    holder.bandiera.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      if (cambiobandiera == 0) { 
       holder.bandiera.setImageResource(R.mipmap.flagrossa); 
       cambiobandiera = 1; 
      } else { 
       holder.bandiera.setImageResource(R.mipmap.flag); 
       cambiobandiera = 0; 
      } 
     } 
    }); 

    holder.positivo.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      //MAKE THE ROW TURNS GREEN 
     } 
    }); 

    holder.negativo.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      //REMOVE ROW FROM LISTVIEW 
     } 
    }); 

    return convertView; 
} 

rigatabella.xml

<?xml version="1.0" encoding="utf-8"?> 
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="horizontal" android:layout_width="match_parent" 
android:layout_height="match_parent"> 


<TableRow 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent" 
    android:gravity="center_horizontal"> 
    <ImageView 
     android:id="@+id/bandiera" android:clickable="true" 
     android:src="@mipmap/flag" 
     android:layout_height="53dp" 
     android:layout_width="1dp" android:gravity="center" 
     android:layout_weight="1" /> 
    <TextView 
     android:id="@+id/ntavolo" android:text="tav." 
     android:layout_weight="1" 
     android:textColor="#000000" 
     android:layout_width="1dp" 
     android:padding="20dip" android:gravity="center"/> 
    <TextView 
     android:id="@+id/piatto" android:text="Piatto" 
     android:layout_weight="1" 
     android:textColor="#000000" 
     android:layout_width="250dp" 
     android:padding="20dip" android:gravity="center"/> 
    <TextView 
     android:id="@+id/qta" android:text="qta" 
     android:layout_weight="1" 
     android:textColor="#000000" 
     android:layout_width="1dp" 
     android:padding="20dip" android:gravity="center"/> 
    <ImageView 
     android:id="@+id/positivo" android:src="@mipmap/conferma" 
     android:layout_weight="1" android:layout_height="53dp" 
     android:layout_width="1dp" android:gravity="center"/> 
    <ImageView 
     android:id="@+id/negativo" android:src="@mipmap/delete" 
     android:layout_weight="1" android:layout_height="53dp" 
     android:layout_width="1dp" android:gravity="center"/> 
</TableRow> 

MainActivity.java

:私は私のコードを入れて
public class MainActivity extends AppCompatActivity { 

ListView lv; 
String[] ntavolo={"2","4","3","5"}; 
String[] piatti={"Spaghetti allo scoglio","Lasagne","Cacca","Verdure miste"}; 
String[] qta={"2","4","1","1"}; 
int[] bandiera={R.drawable.flag, R.drawable.flag,R.drawable.flag,R.drawable.flag}; 
int[] positivo={R.drawable.conferma,R.drawable.conferma,R.drawable.conferma,R.drawable.conferma}; 
int[] negativo={R.drawable.delete,R.drawable.delete,R.drawable.delete,R.drawable.delete}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    lv = (ListView) findViewById(R.id.listView); 

    /** ADAPTER */ 
    Adapter adapter = new Adapter(this, piatti, qta, ntavolo, bandiera, positivo, negativo); 
    lv.setAdapter(adapter); 

} 

どのようにするのですか?

enter image description here

+0

データのリストから行を削除してリストビューを更新します –

+0

はい、どうすればいいですか? –

答えて

1

最初のものではなく、あなたは各行が、その後のArrayListを持っ表すObjectに格納されなければならない別の配列内のデータの各部分を格納:私は何を意味するかを表す画像を表示しますあなたのアダプターの行。

public class Row { 
    private int bandiera; 
    private int positivo; 
    private int negativo; 
    private String piatti; 
    private String qta; 
    private String ntavolo; 

    public Row(int bandiera, int positivo, int negativo, String piatta, String qta, String ntavolo) { 
     this.bandiera = bandiera; 
     this.positivo = positivo; 
     this.negativo = negativo; 
     this.piatti = piatta; 
     this.qta = qta; 
     this.ntavolo = ntavolo; 
    } 
} 

次に、配列の代わりに行のリストを使用するようにアダプタを変更する必要があります。あなたの活動に

public class Adapter extends BaseAdapter { 

/** VARIABILI */ 
ArrayList<Row> rows = new ArrayList<>(); 
Context c; 
LayoutInflater inflater; 
static int cambiobandiera=0; /** SE 0 E' VERDE, SE 1 E' ROSSA 

/** COSTRUTTORE */ 
public Adapter(Context context, ArrayList<Row> rows) 
{ 
    super(context, R.layout.rigatabella); 
    this.c = context; 
    this.rows = rows; 
} 

public int getCount() { 
    return rows.size(); 
} 

public Row getItem(int position) { 
    return rows.get(position); 
} 

public class ViewHolder 
{ 
    ImageView bandiera; 
    TextView ntavolo; 
    TextView piatto; 
    TextView qta; 
    ImageView positivo; 
    ImageView negativo; 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    Row row = getItem(position); 
    // Here use row to fill in your textviews etc. You'll need to add getters to the Row model 


    holder.negativo.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      rows.remove(position); // This removes the row from the dataset 
      notifyDataSetChanged(); // This tells the adapter to update (to show the change on screen) 
     } 
    }); 

    return convertView; 
} 

あなたがにゲッターを追加する必要がありますgetViewメソッドに詳細に記入するためにあなたが現在

ArrayList<Row> rows = new ArrayList<>(); 
for (int i=0; i < ntavolo.length; i++) { 
// This is not very safe. If any of the arrays are smaller than the ntavolo array it will crash 
    row.add(new Row(bandiera[i], positivo[i], negativo[i], piatti[i], qta[i], ntavolo[i]));  
} 
Adapter adapter = new Adapter(this, rows); 
lv.setAdapter(adapter); 

を持つ配列を使用して、行オブジェクトのリストを作成する必要があります行クラスが提供され、あなたが最初の答えを行っているときなど

holder.ntavolo.setText(row.getNtavolo()); 
+0

これは非常に良いです!しかし、 "piatti"はスーパー(コンテキスト、R.layout.rigatabella、piatti)に赤です。また、行を使用して塗りつぶす方法の例を教えてください。私はプログラミングがうまくいきません –

+0

また、私はMainActivity.javaを入れて値を表示しています –

+0

あなたのアクティビティで配列を使ってアダプタを作成する方法と、行を使って詳細を記入する方法の説明をいくつか追加しました – hibob

0

あなたtextviews埋める右のビュー「negativo」のOnItemClickListenerを作成するために、これらを使用しています。このアイテムリスナーは、配列(および文字列)内のオブジェクトを削除します。次に、リストを更新します。がんばろう!