Komang Putra Ответов: 1

Программно удалить элементы в ListView


Мне нужна помощь, чтобы решить эту проблему. я хочу удалить элемент в списке элемент в программном режиме , вот мой код...

absensi_team.java
package com.example.eis2;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.example.eis2.Item.ListViewAdapterCutiKhusus;
import com.example.eis2.Item.ListViewAdapterTeam;
import com.example.eis2.Item.absensiteammodel;
import com.example.eis2.Item.cutikhususmodel;
import com.example.eis2.Item.namanikmodel;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import static com.example.eis2.Item.ListViewAdapterTeam.lokasi;
import static com.example.eis2.Item.ListViewAdapterTeam.nikbaru2;
import static com.example.eis2.Item.LoginItem.KEY_NIK;
import static com.example.eis2.izin.txt_jabatan;
import static com.example.eis2.izin.txt_nomor;
import static com.example.eis2.izinfull.txt_lokasi;
import static com.example.eis2.spv_absensi.txt_jabatan_struktur;
import static com.example.eis2.spv_absensi.txt_lokasi_struktur;


public class absensi_team extends AppCompatActivity {
    public ListView list;
    private List<absensiteammodel> team;
    private List<namanikmodel> movieItemList;

    public static TextView lokasi2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_absensi_team);
        list = findViewById(R.id.list_team);
        team = new ArrayList<>();
        lokasi2 = (TextView) findViewById(R.id.lokasiteam);
        movieItemList = new ArrayList<>();

        getbiodata();
        loadPlayer();
    }

        private void getbiodata () {
            String nik_baru = getIntent().getStringExtra(KEY_NIK);
            StringRequest stringRequest = new StringRequest(Request.Method.GET, "http://hrd.tvip.co.id/rest_server/api/login/index?nik_baru=" + nik_baru,
                    new com.android.volley.Response.Listener<String>() {
                        @Override
                        public void onResponse(String response) {

                            try {
                                JSONObject obj = new JSONObject(response);
                                JSONArray movieArray = obj.getJSONArray("data");

                                for (int i = 0; i < movieArray.length(); i++) {

                                    JSONObject movieObject = movieArray.getJSONObject(i);

                                    namanikmodel movieItem = new namanikmodel(
                                            movieObject.getString("nama_karyawan_struktur"),
                                            movieObject.getString("level_jabatan_karyawan"),
                                            movieObject.getString("lokasi_struktur"),
                                            movieObject.getString("jabatan_struktur")
                                    );
                                    movieItemList.add(movieItem);
                                    lokasi2.setText(movieItem.getLokasi_struktur());

                                }

                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_SHORT).show();
                        }
                    });

            RequestQueue requestQueue = Volley.newRequestQueue(this);
            requestQueue.add(stringRequest);

        }


    private void loadPlayer() {
        String jabatan = txt_jabatan_struktur.getText().toString().trim();
        System.out.println("test 111 = " + jabatan);

        StringRequest stringRequest1 = new StringRequest(Request.Method.GET, "http://hrd.tvip.co.id/rest_server/master/team/index?jabatan_struktur=" + jabatan,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {

                        try {
                            final JSONObject obj = new JSONObject(response);
                            JSONArray movieArray = obj.getJSONArray("data");

                            for (int i = 0; i < movieArray.length(); i++) {

                                final JSONObject movieObject = movieArray.getJSONObject(i);

                                final absensiteammodel movieItem = new absensiteammodel(
                                        movieObject.getString("nik_baru"),
                                        movieObject.getString("nama_karyawan_struktur"),
                                        movieObject.getString("jabatan_karyawan"),
                                        movieObject.getString("lokasi_struktur"));

                                list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                                    @Override
                                    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                                    Intent i = new Intent(absensi_team.this, detail_absensi.class);
                                        i.putExtra(KEY_NIK, nikbaru2.getText().toString());
                                        startActivity(i);
                                        System.out.println("Test :" + nikbaru2);
                                    }
                                });
                                team.add(movieItem);
                            }


                            ListViewAdapterTeam adapter = new ListViewAdapterTeam(team, getApplicationContext());

                            list.setAdapter(adapter);

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(getApplicationContext(), "Maaf, anda belum pernah mengajukan cuti khusus", Toast.LENGTH_SHORT).show();
                    }
                });

        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(stringRequest1);
    }
}


ListViewAdapterTeam.java
package com.example.eis2.Item;

import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

import com.example.eis2.R;
import com.example.eis2.absensi_team;
import com.example.eis2.detail_absensi;

import java.util.List;

import static com.example.eis2.Item.LoginItem.KEY_NIK;
import static com.example.eis2.absensi_team.lokasi2;
import static com.example.eis2.kehadiran.list;
import static com.example.eis2.spv_absensi.txt_jabatan_struktur;
import static com.example.eis2.spv_absensi.txt_lokasi_struktur;

public class ListViewAdapterTeam extends ArrayAdapter<absensiteammodel> {

    List<absensiteammodel> team;

    private Context context;
    public static TextView nikbaru2, lokasi;

    public ListViewAdapterTeam(List<absensiteammodel> team, Context context) {
        super(context, R.layout.list_view_absensi_team, team);
        this.team = team;
        this.context = context;
    }


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

        LayoutInflater inflater = LayoutInflater.from(context);

        View listViewItem = inflater.inflate(R.layout.list_view_absensi_team, null, true);

        nikbaru2 = listViewItem.findViewById(R.id.nik);
        TextView nama = listViewItem.findViewById(R.id.nama);
        TextView jabatan = listViewItem.findViewById(R.id.jabatan);
        lokasi = listViewItem.findViewById(R.id.lokasi);

        absensiteammodel movieItem = team.get(position);

     

        nikbaru2.setText(movieItem.getNikbaru());
        nama.setText(movieItem.getNama_karyawan_struktur());
        jabatan.setText(movieItem.getJabatan_struktur());
        lokasi.setText(movieItem.getLokasi_struktur());

 if (!lokasi2.getText().toString().contentEquals(lokasi.getText().toString())){
            listViewItem.setVisibility(View.INVISIBLE);
        }

        return listViewItem;
    }
}

absensiteammodel.java

package com.example.eis2.Item;

public class absensiteammodel {
    private String nik_baru;
    private String nama_karyawan_struktur;
    private String jabatan_struktur;
    private String lokasi_struktur;

    public absensiteammodel(String nik_baru, String nama_karyawan_struktur, String jabatan_struktur, String lokasi_struktur) {
        this.nik_baru = nik_baru;
        this.nama_karyawan_struktur = nama_karyawan_struktur;
        this.jabatan_struktur = jabatan_struktur;
        this.lokasi_struktur = lokasi_struktur;
    }
    public String getNikbaru() {return nik_baru; }

    public String getNama_karyawan_struktur() {
        return nama_karyawan_struktur;
    }

    public String getJabatan_struktur() {
        return jabatan_struktur;
    }

    public String getLokasi_struktur() {
        return lokasi_struktur;
    }
}


я хочу удалить элемент программно (автоматически), в этом случае.. он удаляет элемент, когда я прокручиваю вниз..

это код который использует его для удаления элемента

if (!lokasi2.getText().toString().contentEquals(lokasi.getText().toString())){
           listViewItem.setVisibility(View.INVISIBLE);
       }


Я буду так благодарен, если кто-то решит эту проблему

Что я уже пробовал:

if (!lokasi2.getText().toString().trim().equalsIgnoreCase(ListViewAdapterTeam.lokasi.getText().toString().trim())) {
                                team.remove(movieItemList);
                                adapter.notifyDataSetInvalidated();
                            }


я уже меняю это в себе absensi_team.java
но всегда говорит:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence android.widget.TextView.getText()' on a null object reference

David Crow

После того как элемент был удален из массива, вам необходимо вызвать notifyDataSetChanged().

Что касается исключения, то у вас есть четыре вызова к getText() в коде, который вы показали. Один из них-это бросать мяч. NullPointerException потому что объект, используемый для вызова getText() является null Вы можете легко узнать, какой из них используется с помощью отладчика.

Ваш объект адаптера действительно должен быть создан и назначен в onCreate() метод, а не в анонимном внутреннем классе.

Komang Putra

Можете ли вы привести мне пример ?
я все еще не понимаю этого

David Crow

- Вы можете привести мне пример ?"

К чему именно?

я все еще не понимаю этого"

В какой части?

Komang Putra

я имею в виду четыре вызова getText(), что это значит ?

1 Ответов

Рейтинг:
0

Gerry Schmitz

(Мои соболезнования: документация по Android-отстой.)

Если вы не можете понять, как удалить, попробуйте перезагрузить (и синхронизировать) представление списка (без элемента "удалено").

Я обнаружил, что перезагрузка (разумного) представления списка не обязательно означает, что пользовательский интерфейс негативно влияет или замедляется (но я использую планшет Windows).