【问题标题】:Trouble saving and displaying intent data无法保存和显示意图数据
【发布时间】:2017-08-02 21:01:18
【问题描述】:

我想在卡片视图被点击时保存它的标题。我很确定我正在以正确的方式发送文本标题,但由于某种原因,我无法在单击项目时保存文本。顺便说一句,每当单击该项目时,它都会打开我的另一个名为“收藏夹”的活动,并显示我想要的文本,但每当我手动打开它时,它什么也不显示。请将此图像作为参考。

任何帮助将不胜感激。谢谢。

点击前

点击后

这是我的 RecyclerAdapter。我尝试以两种方式发送数据,intent 和 SharedPreferences,但都不起作用

public class MyRecyclerAdapter extends RecyclerView.Adapter<MyViewHolder>{

 Context context;
 ArrayList<Album> albums;

public MyRecyclerAdapter(Context c, ArrayList<Album> albums){
    this.context=c;
    this.albums=albums;
}
// Initialize holder
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

   View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.model,null);
    MyViewHolder holder = new MyViewHolder(v);
   return holder;
}

//Bind data to views
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {

  holder.nameTxt.setText(albums.get(position).getName());
  holder.img.setImageResource(albums.get(position).getImage());

 //listener
    holder.setItemClickListener(new ItemClickListener() {
        @Override
        public void onItemClick(View v, int pos) {



            Toast.makeText(context,albums.get(pos).getName() + " ,added to favorite ",Toast.LENGTH_SHORT).show();

            // sending data using intent
            Intent intent = new Intent(context, favorite.class);
            intent.putExtra("text", albums.get(pos).getName());
            intent.putExtra("t", albums.get(pos).getImage());
            context.startActivity(intent);



            // data sharing using sharedPref
            SharedPreferences.Editor editor = context.getApplicationContext().getSharedPreferences("lado", MODE_PRIVATE).edit();
            editor.putString("mug",albums.get(pos).getName());
            editor.apply();


        }
    });
}
@Override
public int getItemCount() {
    return albums.size();
}
}

这是我的另一个活动,我想保存并显示文本。

public class favorite extends AppCompatActivity {

 @BindView(R.id.demoText)
 TextView tv;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_favorite);
    ButterKnife.bind(this);
    /**
     * I'm using bundle here
     */

    Bundle bundle = getIntent().getExtras();
    if(bundle!=null){
        String value2 = bundle.getString("text");
        tv.setText(value2);
    }
    /**
    *  I'm using sharedPref here
    */

    SharedPreferences prefs = getSharedPreferences("lado", MODE_PRIVATE);
    String restoredText = prefs.getString("text", null);
    if (restoredText != null) {
        String name = prefs.getString("mug", "No name defined");//"No name defined" is the default value.
        tv.setText(name);
    }

}

}

【问题讨论】:

    标签: android android-intent sharedpreferences


    【解决方案1】:

    您首先启动最喜欢的活动,然后将数据保存在 SharedPreferences 中。

    尝试先将值保存在SharedPreferences中,然后启动活动并尝试在下一个活动中获取值,你会得到。

    已编辑:

    holder.setItemClickListener(new ItemClickListener() { @覆盖 public void onItemClick(View v, int pos) {

            Toast.makeText(context,albums.get(pos).getName() + " ,added to favorite ",Toast.LENGTH_SHORT).show();
    
            // data sharing using sharedPref
            SharedPreferences.Editor editor = context.getApplicationContext().getSharedPreferences("lado", MODE_PRIVATE).edit();
            editor.putString("mug",albums.get(pos).getName());
            editor.apply();
    
            // sending data using intent
            Intent intent = new Intent(context, favorite.class);
            intent.putExtra("text", albums.get(pos).getName());
            intent.putExtra("t", albums.get(pos).getImage());
            context.startActivity(intent);
    
    
        }
    });
    

    在最喜欢的活动中,你应该得到"mug" 而不是"text",因为你没有在第一个活动中设置“文本”

    SharedPreferences prefs = getSharedPreferences("lado", MODE_PRIVATE);
        //String restoredText = prefs.getString("text", null);
        //if (restoredText != null) {
            String name = prefs.getString("mug", "No name defined");//"No name defined" is the default value.
            tv.setText(name);
      //  }
    

    【讨论】:

    • 我想我只是按照你刚才所说的,没有用。能发一下伪代码吗?谢谢
    • 谢谢。只是好奇,我可以只使用意图来做同样的事情吗?
    • 是的,您只能有意识地这样做。但如果您需要此选择以供以后使用,您可以使用共享首选项
    猜你喜欢
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    相关资源
    最近更新 更多