2017-06-10 58 views
-2

我在我的一個活動中有一個列表視圖,每行內都有一個刪除按鈕。當我單擊刪除按鈕時,我想從兩個不同的數組中刪除該行值。第一個數組是列表數組,它顯示了listview中的信息,第二個數組是我的sharedPreference數組,這是填充listview的數據。這工作正常我第一次運行它,但如果我嘗試刪除多行而不重新創建視圖,它將無法正常工作。Array.remove()不會在onClickListener()中工作多次

這裏是我的代碼:

deleteBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //this will delete the row from the list view 
      list.remove(position); 

      //this deletes the value from the sharedPreference 
      favoritesList.remove(position); 

      notifyDataSetChange(); 
     } 
} 

這工作的罰款,我第一次點擊刪除按鈕,在一排,但如果我想刪除另一行,我點擊不同的行刪除按鈕和當該行從列表視圖中刪除時,它不會從我的favoritesList數組中移除。這意味着favoritesList.remove(位置)僅在第一次運行。這幾乎就像favoritesList沒有被刷新,它只是試圖刪除相同的值,無論我點擊哪一行。這很奇怪,因爲list.remove(位置)工作正常。

那麼如何獲得收藏夾列表(位置)多次運行而不會中斷?如果需要,我可以發佈更多代碼,但我認爲這足夠了。任何幫助表示讚賞。謝謝!

這裏是我的列表視圖全自定義適配器:

public class ItemCustomAdapter extends BaseAdapter implements ListAdapter { 
private ArrayList<String> list = new ArrayList<String>(); 
ArrayList<String> favoritesList; 
private Context context; 
//private final SharedPreferences sharedPrefs; 
String[] favorites; 

public ItemCustomAdapter(ArrayList<String> list, Context context, String[] favorites) { 
    this.list = list; 

    this.context = context; 
    this.favorites = favorites; 
} 

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

@Override 
public Object getItem(int pos) { 
    return list.get(pos); 
} 

@Override 
public long getItemId(int pos) { 
    return 0; 
    //just return 0 if your list items do not have an Id variable. 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    //System.out.println(favoritesList); 

    favoritesList = new ArrayList<String>(Arrays.asList(favorites)); 

    View view = convertView; 
    if (view == null) { 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view = inflater.inflate(R.layout.item_list_view, null); 
    } 

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

    //Handle buttons and add onClickListeners 
    ImageButton deleteBtn = (ImageButton)view.findViewById(R.id.delete_btn); 

    deleteBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      list.remove(position); 
      favoritesList.remove(position); 
      notifyDataSetChanged(); 
     } 
    }); 

    return view; 
} 

}

+1

有人想關閉這個問題,它被標記爲脫離主題(似乎不是一個編程問題)。爲什麼?它看起來像一個編程問題... – Opiatefuchs

+1

也許你爲位置設置了錯誤的值。你能展示你如何獲得'position'值,並且你能顯示你的favoritesList初始化嗎? – Opiatefuchs

+1

,如果你在談論'sharedPreferences','favoritesList'和'sharedPreferences'有什麼關係? – Opiatefuchs

回答

1

正如Opiatefuchs上面所說的,所有我必須做的是移動favoritesList =新的ArrayList(Arrays.asList(收藏夾) );以外的getView()