从SharedPreferences加载数据并填充listview

时间:2016-03-29 04:32:09

标签: java android listview android-studio

我已经为此工作了相当长的一段时间,但仍然无法做到这一点。我正在尝试创建一个简单的应用程序,允许用户手动将项目添加到列表中,并使用SharedPreferences永久存储项目。但我一直无法做到正确(我真的是编程btw的菜鸟)。谁能提出任何建议?非常感谢你!

public class CustomUsersAdapter extends ArrayAdapter<User> {
public CustomUsersAdapter(Context context, ArrayList<User> users) {
    super(context, 0, users);
}




@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // Get the data item for this position
    User user = getItem(position);
    // Check if an existing view is being reused, otherwise inflate the view
    if (convertView == null) {
        convertView = LayoutInflater.from(getContext()).inflate(R.layout.memolist, parent, false);
    }
    // Lookup view for data population
    TextView tvName = (TextView) convertView.findViewById(R.id.tvName);
    TextView tvdate = (TextView) convertView.findViewById(R.id.date);
    TextView indexview = (TextView) convertView.findViewById(R.id.indexnumber);

    // Populate the data into the template view using the data object
    int sequence = position +1;
    user.index = String.valueOf(sequence);

    SharedPreferences sharedpref = PreferenceManager.getDefaultSharedPreferences(getContext());
    String name = sharedpref.getString("JSON", "");


        try {

                JSONObject object = new JSONObject(name);


               user.name = object.getString("Name");
                user.date= object.getString("Category");
                indexview.setText(user.index);
                tvName.setText(user.name);
                tvdate.setText(user.date);




        } catch (JSONException e) {
            e.printStackTrace();

        }



    // Return the completed view to render on screen
    return convertView;
}

所以在这里,我正在尝试使用自定义数组适配器创建一个列表视图,并且在按下Button ManualAddDemo后,它将导航到另一个页面,用户可以在其中输入他们想要的任何内容,并且他们输入的内容将被解析为主要活动(以及另一个字符串的日期)。在这样做之后,我尝试将两个字符串放入JSONObject中,然后将其保存在共享首选项中。然后我在customarrayadapter中检索数据,这样每次加载listview时,都会检索数据。

public class User {
public String name;
public String date;
public String index;

public User( String index, String name, String date) {
    this.index = index;
    this.name = name;
    this.date = date;

}

public static ArrayList<User> getUsers() {
    ArrayList<User> users = new ArrayList<>();





    return users;
}

}

我的用户类:

while

}

有什么建议吗? Tqvm!

2 个答案:

答案 0 :(得分:0)

如评论中所述:

首先,在自定义适配器类中声明构造函数,如

CustomAdapter adapter = new CustomAdapter(this, infoList);

在MainActivity中调用构造函数:

var w = window.open('yourfile.txt'); //Required full file path.
w.print();

答案 1 :(得分:0)

  1. 我相信你会覆盖共享偏好中的对象。您可以存储JSON数组。添加时,应首先检索最后一个 写入数组并追加最新的对象。
  2. 您应该使用sqllite存储数据,共享首选项不适用于此类用途。