2016-09-21 77 views
0

我想要做的是從android中的listview中刪除該行。我很成功地做到這一點。但現在我的問題是當我從ListView中刪除行值的同時我想從我的共享首選項中刪除值和密鑰。根據android中的「Value」獲取共享首選項「Key」

我想這樣做是:當我從列表中刪除行值。我想獲得該行的值,並檢查我的共享首選項中的值。如果那個「價值」在那裏,那麼我將得到基於那個「價值」的「鑰匙」。我知道有一種方法,如:sharedPrefEditor.remove(key);但是我在想,如果有一些與sharedPrefEditor.remove(「key」,「Value」)有關的東西,那麼它會很棒,因爲這樣我可以輕鬆地刪除「特定」鍵/值對。我希望你們爲G

提示:我已經根據時間戳即當我保存的「鑰匙」的時間保存的「鑰匙」的共享偏好。

請隨時向我解答任何問題。 謝謝。

編輯:這是代碼,當我將值添加到陣列列表。解決這個

// get the list values from SharedPreferences 
     Map<String, ?> allEntries = MapActivity_sp.getAll(); 
     for (Map.Entry<String, ?> entry : allEntries.entrySet()) { 
      if (entry.getKey().toString().contains("passedAddressValue")) { 
       if (getpassedAddressValue.contains(entry.getValue().toString())) { 
        //nothing 
       } else 
        getpassedAddressValue.add(entry.getValue().toString()); 

      } 
     } 
     adapter = new InflateLocations(this, getpassedAddressValue, lv); 
     lv.setAdapter(adapter); 

回答

0

的一種方法是,當你填充列表視圖在適配器中,所添加的關鍵作爲標記每個視圖。然後,當您想刪除一行時,您可以檢索該列表項的標籤,這將是您需要刪除的關鍵。

編輯:基於您的示例代碼,我建議修改你的InflateLocations適配器可檢索給定的位置的關鍵:

List<String> keys = new ArrayList<>(); 
Map<String, ?> allEntries = MapActivity_sp.getAll(); 
for (Map.Entry<String, ?> entry : allEntries.entrySet()) { 
    if (entry.getKey().toString().contains("passedAddressValue")) { 
     if (!getpassedAddressValue.contains(entry.getValue().toString())) { 
      getpassedAddressValue.add(entry.getValue().toString()); 
      keys.add(entry.getKey()); 
     } 
    } 
} 
adapter = new InflateLocations(this, getpassedAddressValue, keys, lv); 
lv.setAdapter(adapter); 

然後在InflateLocations,存儲keys在一個領域(比如說,mKeys)並添加了一個方法:

public class InflateLocations extends ... { 
    private List<String> mKeys; // initialize in constructor 
    ... 

    public String getKey(int position) { 
     return mKeys.get(position); 
    } 
} 

當你處理列表項的點擊,您可以通過查詢檢索適配器的關鍵:

public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    InflateLocations adapter = (InflateLocations) parent.getAdpater(); 
    String key = adapter.getKey(position).toString(); 
    // process key 
} 
+0

非常感謝您的快速回復。如果您可以通過示例爲我提供更準確的答案,那麼我將不勝感激。 –

+0

@KaranvirVerma - 我是否正確地假設您正在使用存儲在共享首選項中的值填充列表視圖?如果您提供了關於代碼如何工作的更多細節,那麼展示示例會更容易。 –

+0

我已經編輯了我提出的問題。 –

0
{ rowView.setOnLongClickListener(new View.OnLongClickListener() { 
     @Override 
     public boolean onLongClick(View v) { 
      stringAdd.remove(position); 
      notifyDataSetChanged(); 
      return true; 
     } 
    });} 
0

@TedHopp:這是我的充氣機類的完整代碼。請檢查出來。我也包含了getKey()方法。但我不這麼認爲,因爲它不在getView()方法中。

package c.silent.it.keep.keepitsilent; 

import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.preference.PreferenceManager; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 

import java.util.ArrayList; 
import java.util.List; 

public class InflateLocations extends BaseAdapter { 
    ArrayList<String> stringAdd; 
    private int selectedPosition = -1; 
    String[] stringMd; 
    SharedPreferences sharedpreferences; 
    SharedPreferences.Editor editSP; 
    Context context; 
    ListView listview; 
    private List<String> mKeys; 
    // int [] imageId; 
    private static LayoutInflater inflater = null; 

    // public InflateLocations(List_Locations mainActivity, ArrayList<String> stringAddress, String[] stringMode, ListView lv) { 
    public InflateLocations(List_Locations mainActivity, ArrayList<String> stringAddress, List<String> keys, ListView lv) { 
     // TODO Auto-generated constructor stub 
     stringAdd = stringAddress; 
     context = mainActivity; 
     mKeys=keys; 
     listview = lv; 
     //stringMd = stringMode; 
     inflater = (LayoutInflater) context. 
       getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     sharedpreferences = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext()); 

    } 



    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return stringAdd.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 

    public class Holder { 
     TextView modeTv; 
     TextView addresssTextview; 
     // CheckBox switchForService; 

     // ImageView img; 
    } 

    @Override 
    public View getView(final int position, final View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     final Holder holder = new Holder(); 
     final View rowView; 
     rowView = inflater.inflate(R.layout.inflate_list_locations, null); 
     holder.modeTv = (TextView) rowView.findViewById(R.id.modeTextView); 
     // holder.switchForService = (CheckBox) rowView.findViewById(R.id.switchForService); 
     holder.addresssTextview = (TextView) rowView.findViewById(R.id.addresssTextview); 
     holder.addresssTextview.setText(stringAdd.get(position)); 


     rowView.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       editSP = sharedpreferences.edit(); 
       editSP.putInt("listItemPosition", position); 
       editSP.putString("SelectedAddress", stringAdd.get(position)); 
       editSP.apply(); 
       Intent startactivity = new Intent(context.getApplicationContext(), ServiceButton.class); 
       context.startActivity(startactivity); 
      } 
     }); 

     rowView.setOnLongClickListener(new View.OnLongClickListener() { 
      @Override 
      public boolean onLongClick(View v) { 
       stringAdd.remove(position); 
       notifyDataSetChanged(); 
       return true; 
      } 
     }); 

     return rowView; 

    } 
    public String getKey(int position) { 
     return mKeys.get(position); 
    } 


}