繁体   English   中英

关闭应用程序后如何保存按钮的背景?

[英]How to save the background of a button after closing the app?

我一直在使用android上的社交应用程序工作,但是有一个我无法解决的问题。 我的ListView每个项目都有一个按钮。

当用户按下此按钮时,背景会更改为另一种颜色,但是当我关闭应用程序时,按钮的颜色应成为默认颜色。

尝试这个:

创建一个用于存储每个列表项的颜色信息的模型类。

ListModel.java

public class ListModel implements Serializable
{
    String title;
    int color;

    public ListModel(String title, int color) {
        this.title = title;
        this.color = color;
    }

    public String getTitle() {
        return title;
    }

    public int getColor() {
        return color;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public void setColor(int color) {
        this.color = color;
    }
}

在活动中,创建初始化ListView并为其分配适配器。 在这里,当用户按下“后退”按钮时,我们将使用GSON库将颜色信息列表转换为JSON并将其存储到SharedPreferences 创建活动后,请从SharedPreferences获取JSON ,然后使用GSON将其再次转换回List对象。

Activity.java

public class MainActivity extends AppCompatActivity {

    private MyListAdapter adapter;
    private List<ListModel> dataList;
    private SharedPreferences preferences;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        preferences = PreferenceManager.getDefaultSharedPreferences(this);

        if (preferences.contains("Key")) {
            String jsonStr = preferences.getString("Key", "");
            Type type = new TypeToken<List<ListModel>>() {
            }.getType();
            dataList = new Gson().fromJson(jsonStr, type);
        } else {
            dataList = new ArrayList<>();
            fillData();
        }

        ListView listView = (ListView) findViewById(R.id.listview);

        adapter = new MyListAdapter(this, dataList);
        listView.setAdapter(adapter);
    }

    public void changeColor(int position) {
        dataList.get(position).setColor(getResources().getColor(R.color.blue));
    }

    private void fillData() {
        int color = getResources().getColor(R.color.black);
        dataList.add(new ListModel("Button 1", color));
        dataList.add(new ListModel("Button 2", color));
        dataList.add(new ListModel("Button 3", color));
        dataList.add(new ListModel("Button 4", color));
        dataList.add(new ListModel("Button 5", color));
        dataList.add(new ListModel("Button 6", color));

        adapter.notifyDataSetChanged();
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();

        SharedPreferences.Editor editor = preferences.edit();
        //Set the values
        Gson gson = new Gson();
        String json = gson.toJson(dataList);
        editor.putString("Key", json);
        editor.apply();
    }
}

MyListAdapter.java

public class MyListAdapter extends BaseAdapter
{
    private final Context context;
    private final List<ListModel> list;

    public MyListAdapter(Context context, List<ListModel> list)
    {
        this.context = context;
        this.list = list;
    }

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

    @Override
    public Object getItem(int i) {
        return null;
    }

    @Override
    public long getItemId(int i) {
        return 0;
    }
    /*private view holder class*/
    private class ViewHolder {
        Button button;
    }

    public View getView(final int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;

        LayoutInflater mInflater = (LayoutInflater)
                context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.list_item, null);
            holder = new ViewHolder();
            holder.button = (Button) convertView.findViewById(R.id.listItemBtn);
            convertView.setTag(holder);
        }
        else {
            holder = (ViewHolder) convertView.getTag();
        }


        ListModel model = list.get(position);
        holder.button.setText(model.getTitle());
        holder.button.setBackgroundColor(model.getColor());
        holder.button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                view.setBackgroundColor(context.getResources().getColor(R.color.blue));
                ((MainActivity)context).changeColor(position);

            }
        });
        return convertView;
    }
}

build.gradle ,添加GSON依赖项

compile 'com.google.code.gson:gson:2.2.4'

从本质上讲,您不应该依赖按钮本身,而应该在幕后有一个称为模型的东西来存储这些按钮的状态 因此,您可以在关闭应用程序时将存储所有按钮状态的模型保存到永久内存(例如数据库,文件,共享首选项等)中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM