2012-08-17 20 views
5

Tôi không hiểu những gì là sainotifyDataSetChanged() - IndexOutOfBoundException

Tôi sử dụng

public class UrlArrayAdapter extends BaseAdapter {...  
     ArrayList<UrlItem> objects; 

     UrlArrayAdapter(Context context, ListView urlListView, 
       ArrayList<UrlItem> urlLists) { 
objects = urlLists; ... 



    //method 
    public void deleteItem(int numberToDelete) {   
      objects.remove(numberToDelete);  
      notifyDataSetChanged(); 
     } 

AND (thú vị nhất)

tôi nhận được numberToDelete = 1

Dòng này sau đó bị xóa

enter image description here

nhưng các đối tượng enter image description here

và khi numberToDelete = 0

Dòng này được lấy ra

enter image description here

nhưng các đối tượng enter image description here

VÀ khi numberToDelete = 2

đối tượng

enter image description here

nhưng sau notifyDataSetChanged(); IndexOutOfBoundException

Tôi đã có một bài ... nhưng tôi không thể giải quyết vấn đề này

IndexOutOfBoundException when I use notifyDataSetChanged

stackoverflow.com/a/9260757/1568164 Tôi cảm thấy rằng tình hình là thế này, tôi sử dụng nhưng không hoạt động

Sau đó, tôi nhận được một vị trí để tiếp tục loại bỏ

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

     // Planet to display 
     UrlItem urlItem = (UrlItem) this.getItem(position); 
     ViewHolder viewHolder = null; 

     if (convertView == null) { 

      convertView = lInflater.inflate(R.layout.database_table_item, null); 
      viewHolder = new ViewHolder(); 
      viewHolder.checkbox = (CheckBox) convertView 
        .findViewById(R.id.checkBox1); 

      viewHolder.checkbox.setOnCheckedChangeListener(listener1); 

      viewHolder.text = (EditText) convertView 
        .findViewById(R.id.editText1); 


      viewHolder.text 
        .setOnFocusChangeListener(new OnFocusChangeListener() { 
         public void onFocusChange(View v, boolean hasFocus) { 
          int getPosition = (Integer) v.getTag(); 
          if (!hasFocus) { 

           final EditText Caption = (EditText) v; 
           // urlLists 
           objects.get(getPosition).setUrl(
             Caption.getText().toString()); 
          } else { 

           DatabaseTable.setPosition(getPosition); // This is a future for "numberToDelete" 
          } 
         } 
        }); 

      convertView.setTag(viewHolder); 
      convertView.setTag(R.id.checkBox1, viewHolder.checkbox); 
      convertView.setTag(R.id.editText1, viewHolder.text); 

     } else { 
      viewHolder = (ViewHolder) convertView.getTag(); 

     } 
     viewHolder.text.setTag(position); 
     viewHolder.text.setText(urlItem.getUrl()); 
     viewHolder.checkbox.setTag(position); 
     viewHolder.checkbox.setChecked(urlItem.getUse()); 

     return convertView; 

    } 

My hoạt động cơ sở nơi Tôi gọi là dòng loại bỏ

public class DatabaseTable extends Activity { 
    private Settings setting; 
    private ArrayList<UrlItem> urlLists; 
    private ListAdapter uAdapter; 
    private ListView urlListView; 
    static int position; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.database_table_list); 
     LBD conection = new LBD(this); 
     conection.open(); 
     setting = conection.tblSettings(); 
     setting.create(); 
     urlLists = setting.selectRssTable(); 
     urlListView = (ListView) findViewById(R.id.listView1); 
     uAdapter = new UrlArrayAdapter(DatabaseTable.this, urlListView, 
       urlLists); 
     urlListView.setAdapter(uAdapter); 
     urlListView.setItemsCanFocus(true); 
} 
    public static void setPosition(int pos) { 
     position = pos; 
    } 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     menu.add(Menu.NONE, 2, 2, "Delete URL"); 
     return super.onCreateOptionsMenu(menu); 
    } 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     case 2: 
     ((UrlArrayAdapter) uAdapter).deleteItem(position); 
break; 

     } 
     return super.onOptionsItemSelected(item); 
    } 

} 

tiếp tục chủ đề tôi đã thử nghiệm và kết luận rằng các chuỗi trong danh sách các adapter có ít để làm với một thực tế là xuất ra màn hình, vì vậy các thách thức đang thay đổi. cần hiểu cách xóa các hàng khỏi màn hình

+0

bạn có thể thêm mã cho câu hỏi của bạn, nơi khi bạn chọn một đối tượng từ bảng bạn trả về chỉ số của đối tượng đó? –

+0

Tôi đã thêm, vui lòng xem –

+0

'int position' là gì, đây có phải là chỉ mục của UrlItem đã chọn không? –

Trả lời

2

giải pháp rất đơn giản.

viewHolder.text 
        .setOnFocusChangeListener(new OnFocusChangeListener() { 
         public void onFocusChange(View v, boolean hasFocus) { 

không hoạt động đúng, vẽ lại danh sách các trọng tâm đã thay đổi và xóa dòng hỗn loạn .. đau đớn cho một tuần một quyết định rất đơn giản, sang trái để sửa chữa

Các vấn đề liên quan