我正在寻找一些我一直在努力的教程的帮助。当我使用Intent从一个活动点击一个列表项到另一个活动时,我试图传递一个对象。我已经发布了一些我在下面使用的教程代码,但似乎无法使其工作。
我的主要活动代码如下:
StringRequest stringRequest = new StringRequest(Request.Method.GET, GET_HEROES_URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONArray array = new JSONArray(response);
for(int i =0; i<array.length(); i++){
JSONObject obj = array.getJSONObject(i);
Hero hero = obj.getString("name"));
heroList.add(hero);
}
adapter = new HeroAdapter(heroList, getApplicationContext());
recyclerView.setAdapter(adapter);
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
从我的适配器这是我一直使用的代码:
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
final Hero hero = heroList.get(position);
holder.textViewName.setText(hero.getName());
holder.textViewName.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, HeroDetailActivity.class);
intent.putExtra(KEY_HERO_ID, hero.getName());
context.startActivity(intent);
}
});
}
列出了意图,但它没有将数据载入我的新活动。我只想采取
hero.getName()
在项目列表中单击它的位置并打开一个新活动,并在新活动中将其设置为TextView。这是我在新活动中使用的代码的一部分,但它不会在TextView中发布任何内容。
TextView textViewName
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_hero_detail);
textViewname = (textView) findViewById(R.id.textView);
Intent intent = getIntent();
if(intent == null)
return;
int id = intent.getIntExtra(HeroAdapter.KEY_HERO_ID, -1);
err.setText(id);
例如,我点击位于第3位的列表中的spiderman,在新活动中,textView将加载列出的Spiderman。任何帮助将不胜感激。
答案 0 :(得分:0)
试试这个:
int id = -1;
if(getIntent().hasExtra(HeroAdapter.KEY_HERO_ID)){
id = getIntent().getExtras().getInt(HeroAdapter.KEY_HERO_ID);
}
err.setText("" + id);
如果您需要发送英雄姓名:
在适配器中:
Intent intent = new Intent(context, HeroDetailActivity.class);
intent.putExtra(KEY_HERO_ID, hero.getName());
context.startActivity(intent);
在您的活动中:
String heroName = "";
if(getIntent().hasExtra(HeroAdapter.KEY_HERO_ID)){
heroName = getIntent().getExtras().getString(HeroAdapter.KEY_HERO_ID);
}
err.setText(heroName);
答案 1 :(得分:0)
您可以使用serializable
或parcelable
界面传递对象,但如果您只想要英雄的名字,则应将其作为string
传递给您。现在你传递id
。你完全可以做到这一点。如果是int
,则应将其正确设置为textview
err.setText(String.valueOf(id));
这就是为什么它现在不能正常工作。
或者只是从头开始将其作为string
传递
Intent intent = new Intent(context, HeroDetailActivity.class);
intent.putExtra(KEY_HERO_NAME, hero.getName());
context.startActivity(intent);
然后检索它
Intent intent = getIntent();
if(intent == null)
return;
String heroName = intent.getStingExtra(HeroAdapter.KEY_HERO_NAME);
err.setText(heroName);