0
我正在開發一個健康和健身應用程序,可以使用sharedprefrences存儲用戶信息。這些可以稍後由用戶查看。我可以做到這一點,並在列表視圖中顯示信息。當用戶點擊列表視圖中的項目時,它將加載顯示信息的單獨活動。我的問題是信息始終是隨機排列的,我假設因爲我正在使用sharedprefrences。我的問題是有可能對這些信息進行排序,所以它總是有相同的順序?Java:排序數據
圖片我的應用程序工作的:
這裏的圖像就是一個鍛鍊的用戶輸入信息,並隨後使用保存按鈕保存屏幕。
代碼:
public void saveLog (View view){
EditText Date = (EditText)findViewById(R.id.editDate);
EditText Name = (EditText)findViewById(R.id.editName);
EditText Cal = (EditText)findViewById(R.id.editCal);
EditText STime = (EditText)findViewById(R.id.editSTime);
EditText ETime = (EditText)findViewById(R.id.editETime);
EditText Entry = (EditText)findViewById(R.id.editEntry);
try {
SharedPreferences userInfo = getSharedPreferences("userData", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = userInfo.edit();
Set<String> LogSet = new HashSet<String>();
LogSet.add("Date: "+Date.getText().toString()+"\n");
LogSet.add("Exercise: "+Name.getText().toString()+"\n");
LogSet.add("Start Time: "+STime.getText().toString()+"\n");
LogSet.add("End Time: "+ETime.getText().toString()+"\n");
LogSet.add("Calories Lost: "+Cal.getText().toString()+"\n");
editor.putStringSet(Entry.getText().toString(), LogSet);
editor.commit();
// show toast message for successful save
Context context = getApplicationContext();
CharSequence text = "User data saved!";
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
String Grab = userInfo.getString ("Date" , Date.getText().toString());
}
catch(Exception ex) {
// insert your own error message here
}
}
下一個圖像顯示一個列表裏面的信息。
代碼:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_log);
// Get ListView object from xml
listView = (ListView) findViewById(R.id.list);
listView.setFriction(ViewConfiguration.getScrollFriction() * 0);
// ListView Item Click Listener
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
int itemPosition = position;
String itemValue = (String) listView.getItemAtPosition(position);
SharedPreferences userInfo = getSharedPreferences("userData", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = userInfo.edit();
String myString = userInfo.getAll().keySet().toString();
String[] values = new String[] { myString };
Intent i = new Intent(ActivityLog.this, Log_Data.class);
//Create the bundle
Bundle bundle = new Bundle();
//Add your data from getFactualResults method to bundle
bundle.putString("TAG", itemValue);
//Add the bundle to the intent
i.putExtras(bundle);
startActivity(i);
// ListView Clicked item index
// ListView Clicked item value
// Show Alert
//Toast.makeText(getApplicationContext(), "Position :"+itemPosition+" ListItem : " +itemValue , Toast.LENGTH_LONG).show();
}
});
}
@Override
protected void onStart()
{
SharedPreferences userInfo = getSharedPreferences("userData", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = userInfo.edit();
String myString = userInfo.getAll().keySet().toString();
// String[] values = new String[] { myString };
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.activity_list_item, android.R.id.text1);
Map<String, ?> allEntries = userInfo.getAll();
for (Map.Entry<String, ?> entry : allEntries.entrySet()) {
Log.d("map values", entry.getKey() + ": " + entry.getValue().toString());
adapter.add(entry.getKey()+ ": " + entry.getValue().toString());
listView.setAdapter(adapter);
}
super.onStart();
}
public void showLog (View view){
Intent intent = new Intent(this, ActivityNewLog.class);
startActivity(intent);
}
public void deleteLog (View view){
SharedPreferences settings = getSharedPreferences("userData", Context.MODE_PRIVATE);
settings.edit().clear().commit();
getSharedPreferences("userData", 0).edit().clear().commit();
}
public void dataShow (View view){
Intent intent = new Intent(this, Log_Data.class);
startActivity(intent);
}
的最後形象是活動當用戶點擊列表中的一個項目。它會加載該密鑰的所有信息。
代碼:
public class Log_Data extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_log__data);
TextView data = (TextView)findViewById(R.id.textView5);
Bundle bundle = getIntent().getExtras();
//Extract the data…
String something = bundle.getString("TAG");
//Create the text view
data.setText(something);
}
}
使用束將數據傳遞到所述新活動。那麼是否有可能對這些數據進行排序,以便在最後顯示爲日期,鍛鍊名稱,開始時間,結束時間和卡路里?截至目前,數據總是隨機顯示每個新的日誌條目。
使用本地數據庫(sqlite)而不是首選項。 – androidnoobdev
以及我不想改變偏好的使用,我只是想知道是否有可能根據當前狀態排序信息? –
一組本身是無序的。改用列表。 – wvdz