2017-02-10 9 views
1

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(); 


} 

row.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> 

は誰も私を助けることができる願っています。ありがとう!

+0

は本当にr.layout.rowとlistview_sectionsのXMLを参照する必要があります – SteelBytes

+0

その理由は[RecyclerView](https://developer.android.com/guide/topics/ui/layout/recyclerview.html)です。 – EricRobertBrewer

+0

@SteelBytesが追加されました! :) – DannyGM16

答えて

0

アダプタを介してListViewの項目を追加したり削除したりしてください。アイテムを追加/削除した後、以下の関数を呼び出して変更を反映させます。

adapter.notifyDataSetChanged(); 

これはうまくいきます。

+0

はい、コードでわかるように、私はこのメソッドを各修正の約2回呼び出します。とにかく返信してくれてありがとう。 – DannyGM16

関連する問題