2016-11-21 3 views
0

以下のコードでは、listViewとカスタム配列アダプタを使用して、会議を保存するリストを作成します(関係者、説明、日付と時刻)。私はスタックのオーバーフローを見て、共通の設定になってきました。私はそれを使う方法を本当に知らない。どんな助けも大歓迎です。ここでまた可能であれば、共有環境設定を使用してデータを保存したい

public class MainActivity extends AppCompatActivity { 
ArrayList<SearchResults> searchResults; 
private FloatingActionButton add; 
private FloatingActionButton clear; 
ArrayList<SearchResults> results = new ArrayList<SearchResults>(); 
final Context context = this; 
String time1, people1, description1, mDate, hour, minute, MeridiemIndicator, dateNumber; 
int Year, Month, Day, Hour, Minute; 


@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    searchResults = new ArrayList<SearchResults>(); 
    setContentView(R.layout.activity_main); 
    final ListView lv1 = (ListView) findViewById(R.id.ListView); 
    final CustomAdapter myAdapter = new CustomAdapter(context, R.layout.custom_row_view, results); 
    lv1.setAdapter(myAdapter); 


    add = (FloatingActionButton) findViewById(R.id.add); 
    add.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(final View view) { 

      dialogMethod(lv1); 
     } 


    }); 

    lv1.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      CustomAdapter adapter = (CustomAdapter) parent.getAdapter(); 
      adapter.remove(results.get(position)); 
      adapter.notifyDataSetChanged(); 


     } 
    }); 
    lv1.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
     @Override 
     public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long l) { 
      CustomAdapter adapter = (CustomAdapter) parent.getAdapter(); 
      adapter.remove(results.get(position)); 
      adapter.notifyDataSetChanged(); 
      dialogMethod(lv1); 

      return true; 
     } 


    }); 
    clear = (FloatingActionButton) findViewById(R.id.clear); 
    clear.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(final View view) { 
      results.clear(); 
      CustomAdapter myAdapter = new CustomAdapter(context, R.layout.custom_row_view, results); 
      lv1.setAdapter(myAdapter); 
      myAdapter.notifyDataSetChanged(); 
     } 


    }); 
} 




public void dialogMethod(final ListView lv1) { 
    final Dialog dialog = new Dialog(context); 
    dialog.setContentView(R.layout.activity_add_meeting); 
    dialog.setTitle("Meeting"); 

    //ingredient.getText().toString(); 

    final EditText people = (EditText) dialog.findViewById(R.id.people); 
    if (people.getText().toString().length() == 0) 
     people.setError("Required"); 
    final EditText description = (EditText) dialog.findViewById(R.id.description); 
    if (description.getText().toString().length() == 0) 
     description.setError("Required"); 
    FloatingActionButton save = (FloatingActionButton) dialog.findViewById(R.id.save); 
    // if button is clicked, close the custom ingredient_dialog 
    save.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      DatePicker cal = (DatePicker) dialog.findViewById(R.id.calendar); 
      Year = cal.getYear(); 
      Month = cal.getMonth(); 
      Day = cal.getDayOfMonth(); 
      Month = Month + 1; 

      TimePicker time = (TimePicker) dialog.findViewById(R.id.clock); 
      Hour = time.getHour(); 
      Minute = time.getMinute(); 

      dialog.dismiss(); 
      time1 = hour + ":" + minute + MeridiemIndicator; 
      people1 = people.getText().toString(); 
      description1 = description.getText().toString(); 

      mDate = Year + "/" + Month + "/" + Day; 
      dateNumber = Year + ""; 
      if (Month < 10) { 
       dateNumber += "0" + Month; 
      } else { 
       dateNumber += Month; 
      } 
      if (Day < 10) { 
       dateNumber += "0" + Day; 
      } else { 
       dateNumber += Day; 
      } 


      ArrayList<SearchResults> searchResults = GetSearchResults(); 
      lv1.setAdapter(new CustomAdapter(MainActivity.this, R.layout.custom_row_view, searchResults)); 


     } 
    }); 
    dialog.show(); 


} 
private ArrayList<SearchResults> GetSearchResults() { 


    SearchResults sr1 = new SearchResults(); 
    sr1.setName(" Meeting With: " + people1); 
    sr1.setTimeOfMeeting(" Starts At: " + time1); 
    sr1.setDescription(" Details: " + description1); 
    sr1.setDate(" Date: " + mDate); 
    sr1.setDateNumber(dateNumber); 
    results.add(sr1); 
    Collections.sort(results, new Comparator<SearchResults>() { 
     public int compare(SearchResults x, SearchResults y) { 
      return Integer.parseInt(x.getDateNumber()) - Integer.parseInt(y.getDateNumber()); 
     } 
    }); 


    return results; 
    } 
} 

私のカスタム・アダプタのコード

public class CustomAdapter extends ArrayAdapter { 
private static ArrayList<SearchResults> searchArrayList; 
private LayoutInflater mInflater; 


public CustomAdapter(Context context, int custom_row_view, ArrayList<SearchResults> results) { 
    super(context,custom_row_view,results); 

    searchArrayList = results; 
    mInflater = LayoutInflater.from(context); 

} 

public int getCount() { 
    return searchArrayList.size(); 
} 

public Object getItem(int position) { 
    return searchArrayList.get(position); 
} 

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

public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder; 
    if (convertView == null) { 
     convertView = mInflater.inflate(R.layout.custom_row_view, null); 
     holder = new ViewHolder(); 
     holder.txtName = (TextView) convertView.findViewById(R.id.name); 
     holder.txtTimeOfMeeting = (TextView) convertView.findViewById(R.id.timeOfMeeting); 
     holder.txtDescription = (TextView) convertView.findViewById(R.id.description); 
     holder.txtDate = (TextView) convertView.findViewById(R.id.date); 

     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    holder.txtName.setText(searchArrayList.get(position).getName()); 
    holder.txtTimeOfMeeting.setText(searchArrayList.get(position).getTimeOfMeeting()); 
    holder.txtDescription.setText(searchArrayList.get(position).getDescription()); 
    holder.txtDate.setText(searchArrayList.get(position).getDate()); 

    return convertView; 
} 

static class ViewHolder { 
    TextView txtName; 
    TextView txtTimeOfMeeting; 
    TextView txtDescription; 
    TextView txtDate; 
    } 
} 
+0

[データの保存方法を共有する]の重複(http://stackoverflow.com/questions/6015197/how-to-save-data-using-shared-preferences) –

+0

あなたはリストを保存する必要がありますようにデータベースを使用する必要があります、共有設定は1つまたは2つのエントリに使用されます... – Chol

答えて

0

あなたはJsonObject(またはJsonArray)を作成し、文字列(jsonObject.toString()またはjsonArray.toString()として保存することができますです

JsonObject & &アレイチュートリアル - >https://www.tutorialspoint.com/json/json_java_example.htm

そしてちょうどあなたの文字列を取得したり、保存し

public String getMeetings(){ 
     // ctx is Contex e.g> getApplicationContext() 
     SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(ctx); 
     return sharedPreferences.getString("key_name", "[]"); // return from shared preferences, if there is nothing for key_name the return will be empty array 
    } 

    public void setMeetings(String your_list_asJsonString){ 
     SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(ctx); 
     SharedPreferences.Editor editor = sharedPreferences.edit(); 
     editor.putString("key_name", your_list_asJsonString); // Here you save your string in shared preferences, and than you can access it with key_name 
     editor.commit(); // or editor.apply() 
    } 

方法

0

がたくさんありますAndroidの中で、あなたのアプリにデータを格納する方法はたくさんあります:

  • SharedPreferences
  • デバイスストレージ/ SDカードストレージ
  • SQLite

データの種類に基づいて、データの記憶媒体を選択する必要があります。

  • イメージファイルは、デバイスストレージにJPEG/PNGファイルとして保存し、必要に応じてアプリケーションの外部からアクセスできるようにする必要があります。 SharedePreferences/SQLiteにバイトストリームとしてエンコードされた画像を格納するのは意味がありません。

  • あなたのような固定フォーマットのデータは、リストに表示する必要があります。これは、非常に順序付けられたデータ格納方法を提供するため、SQLに格納する必要があります。

  • 本質的に反復性がなく、構造化されていないフォームなどのその他のデータは、デバイスのSharedPreferencesに保存する必要があります(少なくとも私はSharedPreferencesのAccount Infoなどのデータを保存します)。

それほど理論的な部分です。あなたはリストを持っているので、各リストアイテムに表示されるデータのフォーマットは比較的構造化されており、頻繁にアクセスする必要があります。この場合、データベースを使用してCRUD SQLiteの操作は非常に簡単です。 SQLiteについて学ぶには、Android DevelopersサイトのSQLiteのdocumentationを参照してください。

関連する問題