2012-12-01 94 views
0

您好我有一個ListView與CustomBaseAdapter.The列表視圖的內容EditText和DeleteButton。現在我想刪除按鈕單擊事件的行。我嘗試了adapter.removeViewAt(int)方法,但它給了我例外,即AdapterView不支持removeViewAt(int)。我嘗試了很多解決方案,但沒有工作,請幫助我。使用自定義baseAdapter刪除從列表視圖中的行

我獲得以下錯誤日誌 -

12-01 12:28:53.499: W/System.err(464): java.lang.UnsupportedOperationException: removeView(View) is not supported in AdapterView 
12-01 12:28:53.499: W/System.err(464): at android.widget.AdapterView.removeView(AdapterView.java:489) 
12-01 12:28:53.499: W/System.err(464): at android.view.View.performClick(View.java:2408) 
12-01 12:28:53.499: W/System.err(464): at android.view.View$PerformClick.run(View.java:8816) 
12-01 12:28:53.499: W/System.err(464): at android.os.Handler.handleCallback(Handler.java:587) 
12-01 12:28:53.499: W/System.err(464): at android.os.Handler.dispatchMessage(Handler.java:92) 
12-01 12:28:53.509: W/System.err(464): at android.os.Looper.loop(Looper.java:123) 
12-01 12:28:53.519: W/System.err(464): at android.app.ActivityThread.main(ActivityThread.java:4627) 
12-01 12:28:53.519: W/System.err(464): at java.lang.reflect.Method.invokeNative(Native Method) 
12-01 12:28:53.519: W/System.err(464): at java.lang.reflect.Method.invoke(Method.java:521) 
12-01 12:28:53.519: W/System.err(464): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
12-01 12:28:53.519: W/System.err(464): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
12-01 12:28:53.519: W/System.err(464): at dalvik.system.NativeStart.main(Native Method) 

和我的適配器 -

公共類LazyAdapter延伸BaseAdapter {

private Activity activity; 
private static LayoutInflater inflater=null; 
private int noofrows; 
private int LayoutRid; 


static Map<Integer, String> Amt = new LinkedHashMap<Integer, String>(); 
static String AmtValue; 


public LazyAdapter(Activity a, int rows, int Layoutid) { 
    activity = a;  
    noofrows = rows; 
    LayoutRid = Layoutid; 
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);   
} 


public int getCount() { 
    return noofrows; 
} 

public Object getItem(int position) { 
    return position; 
} 

public long getItemId(int position) { 
    return position; 
} 


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

    ViewHolder holder = new ViewHolder(); 


    convertView = inflater.inflate(_LayoutRid, null); 

     holder.Amount = (EditText)convertView.findViewById(R.id.SESDedCCetDedAmount); 

     holder.btnDel = (Button)convertView.findViewById(R.id.btnMinus); 

     convertView.setTag(holder);  


     holder.Amount.setText(AmtValue == null? "" : AmtValue); 
     holder.btnDel.setText(CodeValue == null? "" : CodeValue); 


     holder.Amount.addTextChangedListener(new TextWatcher() { 

      public void onTextChanged(CharSequence s, int start, int before, int count) { 


      } 

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

      } 

      public void afterTextChanged(Editable s) { 
       Amt.put(position, s.toString()); 
      } 
     }); 


     holder.btnDel.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       // Take List from parent view 
       ParentActivity.list.removeViewAt(position); 
       notifyDataSetChanged(); 
      } 
     }); 


    return convertView; 
} 

static class ViewHolder { 

    EditText Amount; 
    Button btnDel; 

} 

}

+0

如果你真的使用'BaseAdapter',你的'getCount()'方法返回什麼? – mango

+0

是的,我的getCount()方法在列表中返回noofrows。 – nyt23

+0

假設您在某個集合中的含義是「行數」,您是否試圖刪除集合中的特定索引? – mango

回答

-1

我解決了這個問題。我試圖從Arraylist中刪除它,但實際上我將它存儲在Hashmap中,所以我必須將它從HashMap中刪除。所以,hashmap.remove(position);解決了我的問題。

0

試試這個,

holder.delete.setOnClickListener(new OnClickListener() 

    { 
     @Override 
     public void onClick(View v) 
     { 
      your_item.remove(position);//you can delete your item here 

      notifyDataSetChanged(); 
     } 
    }); 

notifyDataSetChanged是刷新視圖和更新數據。

0
myHolder.btn_delete.setOnClickListener(new OnClickListener() 
{ 
    @Override 
    public void onClick(View v) 
    { 
     // remove data from List and call 
     notifyDataSetChanged(); <-- will remove old data 
    } 
}); 
+0

我試過但沒有發生同樣的錯誤即將到來。 – nyt23

+0

你可以發佈你的錯誤日誌plz – MAC

+0

PLZ看我的錯誤日誌在我編輯的闕。 – nyt23

7

剛剛嘗試這個代碼,

btnOrImage.setOnClickListener(new OnClickListener() 
{ 
    @Override 
    public void onClick(View v) 
    { 
     // delete query fire here whatever related to requirements. 
     mList.remove(position);//you can delete your item here 
     notifyDataSetChanged(); 
    } 
}); 

)用於notifyDataSetChanged(此方法刷新getView()從你的BaseAdapter方法。

+0

我有一個listview不是一個ArrayList ..所以我不能在ListView上調用remove().. – nyt23

+0

使用也可以用於它的arraylist和listview兩者。 –

+0

哪個適配器使用? –

相關問題