android - 使用 SharedPreference 用内容填充 ListView

标签 android listview sharedpreferences adapter

基本上,我在 Activity 中有这个 ListView,我想在按下 ImageButton(星号)时发送行上下文。

在第一个列表 (AdapterExploreListView) 的适配器类中,我重写了 ImageButtonOnClicklistener 并使用了 SharedPreference 将内容从第二个 Activity 传输到第二个列表。

在我的第二个 Activity 中,我尝试使用第一个 Activity 的数据生成一个新的 ListView。这是我的问题:

第一个列表:

第一个适配器:

public class AdapterExploreListView extends BaseAdapter implements Filterable {
    ArrayList<Track> tracks;
    Context context;
    private ArrayList<Track> items;
    private ArrayList<Track> orig;
    public static final String Title = "titleKey";
    public static final String Username = "usernameKey";

    public AdapterExploreListView(Context context, ArrayList<Track> tracks) {
        this.tracks = new ArrayList<>();
        this.tracks = tracks;
        this.context = context;
        getFilter();
    }

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

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

    @Override
    public long getItemId(int i) {
        return 0;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        View rowView = view;
        // reuse views
        if (rowView == null) {
            LayoutInflater inflater = LayoutInflater.from(context);
            rowView = inflater.inflate(R.layout.row_list_explore, null);
            // configure view holder
            ViewHolder viewHolder = new ViewHolder();
            viewHolder.title = (TextView) rowView.findViewById(R.id.titleTextView);
            viewHolder.userName = (TextView) rowView.findViewById(R.id.userNameTextView);
            viewHolder.listImageView = (ImageView) rowView.findViewById(R.id.favbutton);
            rowView.setTag(viewHolder);
        }
        // fill data
        final ViewHolder holder = (ViewHolder) rowView.getTag();
        Track track = tracks.get(i);
        holder.title.setText(track.getTitle());
        holder.userName.setText(track.getUsername());
        holder.listImageView.setImageResource(R.drawable.favoritespic);
        holder.listImageView.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(context,ForthActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(intent);
                SharedPreferences sp = context.getSharedPreferences("Save",
                    Context.MODE_PRIVATE);
                SharedPreferences.Editor editor = sp.edit();

                String n = holder.title.getText().toString();
                String e = holder.userName.getText().toString();
                editor.putString(Title, n);
                editor.putString(Username, e);
                editor.commit();
            }
        });
        //  if(!track.getArtworkUrl().equalsIgnoreCase("null"))
        //  {
        //      ImageLoader.getInstance().displayImage(track.getArtworkUrl(), holder.listImageView);
        //  } else {
        //      ImageLoader.getInstance().displayImage(track.getAvatarUrl(), holder.listImageView);
        //  }
        return rowView;
    }

    static class ViewHolder {
        TextView title;
        TextView userName;
        ImageView listImageView;
    }

    public Filter getFilter() {
        return new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
                final FilterResults oReturn = new FilterResults();
                final ArrayList<Track> results = new ArrayList<Track>();
                if (orig == null) orig = items;
                if (constraint != null) {
                    if (orig != null && orig.size() > 0) {
                        for (final Track g : orig) {
                            if (g.getTitle().toLowerCase().contains(constraint.toString()))
                                results.add(g);
                        }
                    }
                    oReturn.values = results;
                }
                return oReturn;
            }

            @SuppressWarnings("unchecked")
            @Override
            protected void publishResults(CharSequence constraint,
                                          FilterResults results) {
                items = (ArrayList<Track>) results.values;
                notifyDataSetChanged();
            }
        };
    }

    public void notifyDataSetChanged() {
        super.notifyDataSetChanged();
        boolean notifyDataSetChanged = true;
    }
}

第二个适配器:

public class AdapterExploreListView2 extends BaseAdapter {
    private ArrayList<CustomObject> objects;
    Context context;

    public static final String Title = "titleKey";
    public static final String Username = "usernameKey";

    public AdapterExploreListView2(Context context, ArrayList<CustomObject> objects) {
        this.objects = new ArrayList<>();
        this.objects = objects;
        this.context = context;
    }

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

    public CustomObject getItem(int position) {
        return objects.get(position);
    }

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

    @Override
    public View getView(int position, View view, ViewGroup viewGroup) {
        View rowView = view;
        // reuse views
        if (rowView == null) {
            LayoutInflater inflater = LayoutInflater.from(context);
            rowView = inflater.inflate(R.layout.row_list_forthact, null);
            // configure view holder
            ViewHolder viewHolder = new ViewHolder();
            viewHolder.title = (TextView) rowView.findViewById(R.id.titleTV);
            viewHolder.userName = (TextView) rowView.findViewById(R.id.userNameTV);
            // viewHolder.listImageView = (ImageView) rowView.findViewById(R.id.listImageView);
            rowView.setTag(viewHolder);
        }
        // fill data
        ViewHolder holder = (ViewHolder) rowView.getTag();
        holder.title.setText(objects.get(position).getProp1());
        holder.userName.setText(objects.get(position).getProp2());
        return rowView;
    }

    static class ViewHolder {
        TextView title;
        TextView userName;
        // ImageView listImageView;
    }

    public void notifyDataSetChanged() {
        super.notifyDataSetChanged();
        boolean notifyDataSetChanged = true;
    }
}

第二个 Activity :

public class ForthActivity extends Activity {
    SharedPreferences sharedpreferences;
    public static final String Title = "titleKey";
    public static final String Username = "usernameKey";
    CustomObject obj;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.forthact);
        // title = (TextView) findViewById(R.id.etitle);
        // username = (TextView) findViewById(R.id.eemail);
        sharedpreferences = getSharedPreferences("Save",
           Context.MODE_PRIVATE);

        if (sharedpreferences.contains(Title)) {
            obj.setProp1(sharedpreferences.getString(Title, ""));
        }
        if (sharedpreferences.contains(Username)) {
            obj.setProp2(sharedpreferences.getString(Username, ""));
        }

        ArrayList<CustomObject> object = new ArrayList<CustomObject>();
        AdapterExploreListView2 customAdapter = new AdapterExploreListView2(ForthActivity.this, object);
        ListView lv = (ListView) findViewById(R.id.forthlistview);
        lv.setAdapter(customAdapter);
    }
}

CustomObject 类:

public class CustomObject {
    private String prop1;
    private String prop2;

    public CustomObject(String prop1, String prop2) {
        this.prop1 = prop1;
        this.prop2 = prop2;
    }

    public void setProp1(String prop1) {
        this.prop1 = prop1;
    }

    public void setProp2(String prop2) {
        this.prop2 = prop2;
    }

    public String getProp1() {
        return prop1;
    }

    public String getProp2() {
        return prop2;
    }
}

最佳答案

它只适用于一行:

               sharedpreferences = getSharedPreferences("Save",
           Context.MODE_PRIVATE);
    CustomObject obj=new CustomObject(sharedpreferences.getString(Title, ""),sharedpreferences.getString(Username, ""));

    ArrayList<CustomObject> object = new ArrayList<CustomObject>();
    object.add(obj);
    AdapterExploreListView2 customAdapter = new AdapterExploreListView2(ForthActivity.this, object);
    ListView lv=(ListView)findViewById(R.id.forthlistview);
    lv.setAdapter(customAdapter);
}

关于android - 使用 SharedPreference 用内容填充 ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32358522/

相关文章:

java - 如何在android中将小时与相应的分钟分组?

Android SharedPreferences 并发

android - 带滚动条的 RecyclerView

android - 在textview中显示listview的选定值

javascript - 按钮点击动画

android - 为什么我在 xml 中写的文本不显示?

java - 使用sharedPreferences保存颜色和删除线文本

java - 如何实现加密的共享偏好设置

android - FacebookSdk.sdkInitialize(上下文)已弃用

java - THREAD_POOL_EXECUTOR 在 2.3 android 模拟器中崩溃