Links & Dependenciesactivity_main.xmlMainActivity.javaexample_item.xmlExampleItem.javaExampleAdapter.java
GSON library on GitHub with dependency + instructions:
RecyclerView & CardView dependencies:
developer.android.com/topic/libraries/support-library/packages#v7-recyclerview
developer.android.com/topic/libraries/support-library/packages#v7-cardview
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.application.gsonexample.MainActivity"> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerview" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginBottom="100dp" android:background="@android:color/darker_gray" /> <EditText android:id="@+id/edittext_line_1" android:layout_width="180dp" android:layout_height="wrap_content" android:layout_alignParentStart="true" android:layout_alignParentBottom="true" android:layout_marginBottom="52dp" android:hint="Line 1" /> <EditText android:id="@+id/edittext_line_2" android:layout_width="180dp" android:layout_height="wrap_content" android:layout_alignParentStart="true" android:layout_alignParentBottom="true" android:hint="Line 2" /> <Button android:id="@+id/button_insert" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@id/edittext_line_1" android:layout_marginStart="13dp" android:layout_marginTop="23dp" android:layout_toEndOf="@id/edittext_line_1" android:text="insert" /> <Button android:id="@+id/button_save" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@id/button_insert" android:layout_toEndOf="@+id/button_insert" android:text="save" /> </RelativeLayout>
package com.example.application.gsonexample; import android.content.SharedPreferences; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.Button; import android.widget.EditText; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { ArrayList<ExampleItem> mExampleList; private RecyclerView mRecyclerView; private ExampleAdapter mAdapter; private RecyclerView.LayoutManager mLayoutManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); loadData(); buildRecyclerView(); setInsertButton(); Button buttonSave = findViewById(R.id.button_save); buttonSave.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { saveData(); } }); } private void saveData() { SharedPreferences sharedPreferences = getSharedPreferences("shared preferences", MODE_PRIVATE); SharedPreferences.Editor editor = sharedPreferences.edit(); Gson gson = new Gson(); String json = gson.toJson(mExampleList); editor.putString("task list", json); editor.apply(); } private void loadData() { SharedPreferences sharedPreferences = getSharedPreferences("shared preferences", MODE_PRIVATE); Gson gson = new Gson(); String json = sharedPreferences.getString("task list", null); Type type = new TypeToken<ArrayList<ExampleItem>>() {}.getType(); mExampleList = gson.fromJson(json, type); if (mExampleList == null) { mExampleList = new ArrayList<>(); } } private void buildRecyclerView() { mRecyclerView = findViewById(R.id.recyclerview); mRecyclerView.setHasFixedSize(true); mLayoutManager = new LinearLayoutManager(this); mAdapter = new ExampleAdapter(mExampleList); mRecyclerView.setLayoutManager(mLayoutManager); mRecyclerView.setAdapter(mAdapter); } private void setInsertButton() { Button buttonInsert = findViewById(R.id.button_insert); buttonInsert.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { EditText line1 = findViewById(R.id.edittext_line_1); EditText line2 = findViewById(R.id.edittext_line_2); insertItem(line1.getText().toString(), line2.getText().toString()); } }); } private void insertItem(String line1, String line2) { mExampleList.add(new ExampleItem(line1, line2)); mAdapter.notifyItemInserted(mExampleList.size()); } }
<?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="4dp" app:cardCornerRadius="4dp"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="4dp"> <TextView android:id="@+id/textview_line1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Line 1" android:textColor="@android:color/black" android:textSize="20sp" android:textStyle="bold" /> <TextView android:id="@+id/textview_line_2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textview_line1" android:layout_marginStart="8dp" android:text="Line 2" android:textSize="15sp" /> </RelativeLayout> </android.support.v7.widget.CardView>
package com.example.application.gsonexample; public class ExampleItem { private String mLine1; private String mLine2; public ExampleItem(String line1, String line2) { mLine1 = line1; mLine2 = line2; } public String getLine1() { return mLine1; } public String getLine2() { return mLine2; } }
package com.example.application.gsonexample; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import java.util.ArrayList; public class ExampleAdapter extends RecyclerView.Adapter<ExampleAdapter.ExampleViewHolder> { private ArrayList<ExampleItem> mExampleList; public static class ExampleViewHolder extends RecyclerView.ViewHolder { public TextView mTextViewLine1; public TextView mTextViewLine2; public ExampleViewHolder(View itemView) { super(itemView); mTextViewLine1 = itemView.findViewById(R.id.textview_line1); mTextViewLine2 = itemView.findViewById(R.id.textview_line_2); } } public ExampleAdapter(ArrayList<ExampleItem> exampleList) { mExampleList = exampleList; } @Override public ExampleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.example_item, parent, false); ExampleViewHolder evh = new ExampleViewHolder(v); return evh; } @Override public void onBindViewHolder(ExampleViewHolder holder, int position) { ExampleItem currentItem = mExampleList.get(position); holder.mTextViewLine1.setText(currentItem.getLine1()); holder.mTextViewLine2.setText(currentItem.getLine2()); } @Override public int getItemCount() { return mExampleList.size(); } }