java - 使用 BaseAdapter 删除 ListView 中的项目

标签 java android listview baseadapter

我的 BaseAdapter 有问题。 当我将项目添加到 ListView 时,我得到以下信息:

enter image description here

当我一项一项删除项目时,我遇到了这个问题:

enter image description here

BaseAdapter.java

public class TipsterAdapter extends BaseAdapter implements ListAdapter {
private ArrayList<String> list = new ArrayList<String>();
private Context context;
AlertDialog dialog;
private static final int TYPE_ITEM = 0;
private static final int TYPE_SEPARATOR = 1;
private TreeSet<Integer> sectionHeader = new TreeSet<Integer>();
private LayoutInflater mInflater;
DataBase datb;
ImageButton removeBttn;
ImageButton editBttn;
Button visit;




public TipsterAdapter(Context context, DataBase datb) {
    mInflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    this.datb = datb;
    this.context = context;
}

@Override
public int getCount() {
    return list.size();
}

@Override
public Object getItem(int pos) {
    if(list.size() == 0) {
        return null;
    }
    return list.get(pos);
}

@Override
public long getItemId(int pos) {
    return pos;
    //just return 0 if your list items do not have an Id variable.
}
public static class ViewHolder {
    public TextView textView;
}
@Override
public int getItemViewType(int position) {
    return sectionHeader.contains(position) ? TYPE_SEPARATOR : TYPE_ITEM;
}
@Override
public int getViewTypeCount() {
    return 2;
}

public void addItem(final String item) {
    list.add(item);
    notifyDataSetChanged();
}

public void addSectionHeaderItem(final String item) {
    list.add(item);
    sectionHeader.add(list.size() - 1);
    notifyDataSetChanged();
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder holder = null;
    int rowType = getItemViewType(position);
    final View bieg = convertView;
    if (convertView == null) {
        holder = new ViewHolder();
        switch (rowType) {
            case TYPE_ITEM:
                convertView = mInflater.inflate(R.layout.row, null);
                holder.textView = (TextView) convertView.findViewById(R.id.textView1);
                removeBttn = (ImageButton)convertView.findViewById(R.id.remove_btn);
                editBttn = (ImageButton)convertView.findViewById(R.id.edit_btn);
                visit = (Button) convertView.findViewById(R.id.visitar);
                if(getItem(position).toString().equals("Los tipsters agregados aparecerán aquí")) {
                    holder.textView.setTextSize(15);
                    removeBttn.setVisibility(View.INVISIBLE);
                    editBttn.setVisibility(View.INVISIBLE);
                    visit.setVisibility(View.INVISIBLE);
                } else if (getItem(position).toString().equals("TasmaTenis ITF") || getItem(position).toString().equals("KrlosTM") || getItem(position).toString().equals("GreengoSIR") || getItem(position).toString().equals("Ribe Experience")) {
                    removeBttn.setVisibility(View.INVISIBLE);
                    editBttn.setVisibility(View.INVISIBLE);
                    visit.setVisibility(View.VISIBLE);
                } else {
                    visit.setVisibility(View.INVISIBLE);
                    removeBttn.setVisibility(View.VISIBLE);
                    editBttn.setVisibility(View.VISIBLE);
                }

                visit.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if(getItem(position).toString().equals("KrlosTM")) {
                            String url = "https://t.me/KrlosTMpicks";
                            Intent i = new Intent(Intent.ACTION_VIEW);
                            i.setData(Uri.parse(url));
                            context.startActivity(i);
                        } else if(getItem(position).toString().equals("TasmaTenis ITF")) {
                            String url = "https://t.me/TasmaPicksTenis";
                            Intent i = new Intent(Intent.ACTION_VIEW);
                            i.setData(Uri.parse(url));
                            context.startActivity(i);
                        } else if(getItem(position).toString().equals("GreengoSIR")) {
                            String url = "https://t.me/GreengoSIR";
                            Intent i = new Intent(Intent.ACTION_VIEW);
                            i.setData(Uri.parse(url));
                            context.startActivity(i);
                        } else if(getItem(position).toString().equals("Ribe Experience")) {
                            String url = "https://t.me/ribexperience";
                            Intent i = new Intent(Intent.ACTION_VIEW);
                            i.setData(Uri.parse(url));
                            context.startActivity(i);
                        } else {

                        }
                    }
                }

                );
                final View finalConvertView = convertView;
                final ViewHolder finalHolder = holder;
                removeBttn.setOnClickListener(new View.OnClickListener(){
                    @Override
                    public void onClick(View v) {
                        OperacionesBaseDatos db = new OperacionesBaseDatos();
                        db.eliminarTipster(getItem(position).toString());
                        Toast.makeText(v.getContext(), "Tipster borrado", Toast.LENGTH_LONG).show();
                        list.clear();
                        sectionHeader = new TreeSet<Integer>();
                        list = new ArrayList<String>();
                        notifyDataSetChanged();
                        Cursor cursor=datb.GetAllTipsterData();
                        list.clear();
                        addSectionHeaderItem("Mis Tipsters");
                        SQLiteDatabase db2 = datb.getWritableDatabase();
                        long numRows = DatabaseUtils.queryNumEntries(db2, "tipster");
                        if(numRows==0) {
                            final ImageButton removeBttn = (ImageButton) finalConvertView.findViewById(R.id.remove_btn);
                            final ImageButton editBttn = (ImageButton) finalConvertView.findViewById(R.id.edit_btn);
                            final Button visit = (Button) finalConvertView.findViewById(R.id.visitar);
                            Activity act = (Activity)context;
                            act.runOnUiThread(new Runnable(){
                                @Override
                                public void run() {
                                    removeBttn.setVisibility(View.INVISIBLE);
                                    editBttn.setVisibility(View.INVISIBLE);
                                    visit.setVisibility(View.INVISIBLE);
                                } });
                            addItem("Los tipsters agregados aparecerán aquí");
                        }
                        while(cursor.moveToNext()) {
                            addItem(cursor.getString(0));
                        }
                        addSectionHeaderItem("Tipsters Recomendados");
                        addItem("TasmaTenis ITF");
                        addItem("KrlosTM");
                        addItem("GreengoSIR");
                        addItem("Ribe Experience");
                        datb.close();
                        notifyDataSetChanged();
                    }
                });
                editBttn.setOnClickListener(new View.OnClickListener(){
                    @Override
                    public void onClick(final View v23) {
                        AlertDialog.Builder alertDialog = new AlertDialog.Builder(new ContextThemeWrapper(v23.getContext(), R.style.AlertDialogCustom));
                        alertDialog.setTitle("Editar Tipster");
                        alertDialog.setTitle("Editar Tipster");
                        alertDialog.setMessage("Escribe el nuevo nombre del tipster:");
                        final EditText input = new EditText(v23.getContext());
                        input.setTextColor(ContextCompat.getColor(v23.getContext(), android.R.color.black));
                        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
                                LinearLayout.LayoutParams.MATCH_PARENT,
                                LinearLayout.LayoutParams.MATCH_PARENT);
                        input.setLayoutParams(lp);
                        alertDialog.setView(input);
                        alertDialog.setPositiveButton("Cambiar",
                                new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int which) {
                                        String fechaActual = Calendar.getInstance().getTime().toString();
                                        //if (string.trim().length() == 0) {
                                        try {
                                            SQLiteDatabase db=datb.getWritableDatabase();
                                            String sql="UPDATE tipster set nombre='" + input.getText().toString() + "' where nombre like '" + getItem(position).toString() + "'";
                                            try{
                                                db.execSQL(sql);
                                            }catch(SQLException ex){
                                                Log.d(TAG,"update data failure");
                                            }
                                        } finally {
                                            Toast.makeText(v23.getContext(),
                                                    "Tipster modificado", Toast.LENGTH_SHORT).show();
                                        }
                                        list.clear();
                                        sectionHeader = new TreeSet<Integer>();
                                        Cursor cursor=datb.GetAllTipsterData();
                                        addSectionHeaderItem("Mis Tipsters");
                                        while(cursor.moveToNext()) {
                                            addItem(cursor.getString(0));
                                        }
                                        addSectionHeaderItem("Tipsters Recomendados");
                                        addItem("TasmaTenis ITF");
                                        addItem("KrlosTM");
                                        addItem("GreengoSIR");
                                        addItem("Ribe Experience");
                                        datb.close();
                                        notifyDataSetChanged();

                                    }
                                });

                        alertDialog.setNegativeButton("Cancelar",
                                new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int which) {
                                        dialog.cancel();
                                    }
                                });
                        dialog = alertDialog.create();
                        dialog.setOnShowListener(new DialogInterface.OnShowListener() {

                            @Override
                            public void onShow(DialogInterface dialog) {
                                ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
                            }
                        });

                        input.addTextChangedListener(new TextWatcher() {
                            @Override
                            public void onTextChanged(CharSequence s, int start, int before,
                                                      int count) {
                            }

                            @Override
                            public void beforeTextChanged(CharSequence s, int start, int count,
                                                          int after) {
                            }

                            @Override
                            public void afterTextChanged(Editable s) {
                                // Check if edittext is empty
                                if (TextUtils.isEmpty(s) || s.toString().trim().length() == 0) {
                                    // Disable ok button
                                    ((AlertDialog) dialog).getButton(
                                            AlertDialog.BUTTON_POSITIVE).setEnabled(false);
                                } else {
                                    // Something into edit text. Enable the button.
                                    ((AlertDialog) dialog).getButton(
                                            AlertDialog.BUTTON_POSITIVE).setEnabled(true);
                                }

                            }
                        });
                        dialog.show();
                        notifyDataSetChanged();
                    }
                });
                break;
            case TYPE_SEPARATOR:
                convertView = mInflater.inflate(R.layout.listview_sections, null);
                holder.textView = (TextView) convertView.findViewById(R.id.textSeparator);
                break;
        }
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }
    holder.textView.setText(list.get(position));
    View view = convertView;


    //Handle TextView and display string from your list
    //TextView listItemText = (TextView)view.findViewById(R.id.textView1);
    //listItemText.setText(list.get(position));

    //Handle buttons and add onClickListeners

    //holder.textView.setText(list.get(position));
    return view;
}

我在 Tipster.java 中这样调用它:

public void displayList(View view){
    db = new DataBase ((MainActivity)getActivity());
    Cursor cursor=db.GetAllTipsterData();
    ArrayList<String> mArrayList = new ArrayList<String>();
    adapter = new TipsterAdapter((MainActivity)getActivity(), db);
    adapter.addSectionHeaderItem("Mis Tipsters");
    Log.e("COLUMNAS: ", ""+cursor.getColumnCount());
    SQLiteDatabase db2 = db.getWritableDatabase();
    long numRows = DatabaseUtils.queryNumEntries(db2, "tipster");
    if(numRows==0) {
        adapter.addItem("Los tipsters agregados aparecerán aquí");
    }
    while(cursor.moveToNext()) {
        adapter.addItem(cursor.getString(0));
    }
    adapter.addSectionHeaderItem("Tipsters Recomendados");
    adapter.addItem("TasmaTenis ITF");
    adapter.addItem("KrlosTM");
    adapter.addItem("GreengoSIR");
    adapter.addItem("Ribe Experience");
    ListView lv = (ListView) view.findViewById(R.id.listita);

    lv.setAdapter(adapter);
    db.close();


}

行.xml

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

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:layout_alignParentLeft="true"
    android:paddingLeft="8dp"
    android:textSize="20sp"
    android:textStyle="bold" />

<ImageButton
    android:id="@+id/remove_btn"
    android:layout_width="50dp"
    android:src="@drawable/ic_removebttn"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_marginRight="5dp"
    android:layout_alignTop="@+id/edit_btn"
    android:layout_alignBottom="@+id/edit_btn" />

<ImageButton
    android:id="@+id/edit_btn"
    android:layout_width="50dp"
    android:src="@drawable/ic_editbttn"
    android:layout_height="50dp"
    android:layout_toLeftOf="@id/remove_btn"
    android:layout_centerVertical="true"
    android:layout_marginRight="10dp" />

<Button
    android:text="Visitar"
    android:layout_width="89dp"
    android:layout_height="wrap_content"
    android:layout_alignTop="@+id/remove_btn"
    android:id="@+id/visitar"
    android:visibility="gone"
    android:layout_alignRight="@+id/remove_btn"
    android:layout_alignEnd="@+id/remove_btn" />

listview_sections.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#52b1ff"
android:gravity="center_vertical" >
<TextView
    android:id="@+id/textSeparator"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:padding="8dp"
    android:text=""
    android:textAllCaps="true"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textColor="#ffffff"
    android:textStyle="bold"
    android:visibility="visible" />
</LinearLayout>

希望有人能帮助我。谢谢!

最佳答案

请务必通过适配器添加和删除 ListView 的项目。添加/删除项目后,调用下面的函数来反射(reflect)您的更改。

adapter.notifyDataSetChanged();

希望这对您有用。

关于java - 使用 BaseAdapter 删除 ListView 中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42149415/

相关文章:

java - Java中的静态 block 未执行

android - 如何在android源中默认启用开发者选项?

android - 缩略图图像正在重新创建,其位置在滚动 ListView 上被打乱

java - 使用 Char 访问数组元素

java - 是否有替代 StringUtils.isNumeric 的方法来实现我的意思?

未找到 Android 和 Google 客户端 API NetHttptransport 类

C# 检查所有 ListView 组中除第一个之外的所有项目

css - 带有滚动条的 Tab 面板内 Sencha Touch 中的 ListView

java - 升级到 Thymeleaf 3 并在 Spring 中重新实现富 HTML 电子邮件

android - 在 ListView 中显示 RatingBar