将活动之间的数据从列表视图传递到另一个活动
Posted
技术标签:
【中文标题】将活动之间的数据从列表视图传递到另一个活动【英文标题】:Passing data between activities from listview to another activity 【发布时间】:2013-08-14 12:19:05 【问题描述】:我正在尝试将数据从这个主要活动传递到另一个活动
我成功地在活动之间发送数据....就像通过 putExtra
和 GetExtra
方法将数据从 Edit-text 发送到下一个活动并作为意图传递
任何想法,
ativity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_ >
<ListView
android:id="@+id/listViewID"
android:layout_
android:layout_
android:layout_gravity="center">
</ListView>
</LinearLayout>
MainActivity.java
public class MainActivity extends Activity
// url to make request
private static String url = "http://54.218.73.244:7002/";
List<Item> yourData = new ArrayList<Item>();
ProgressDialog progressDialog;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Instantiating ProgressDialog with onCreate method
progressDialog=new ProgressDialog(MainActivity.this);
new ParsingAsync().execute();
private class ParsingAsync extends AsyncTask<Void, Void, Void>
@Override
protected void onPreExecute()
// TODO Auto-generated method stub
super.onPreExecute();
progressDialog=ProgressDialog.show(MainActivity.this, "", "Please Wait", true, false);
@Override
protected Void doInBackground(Void... params)
// TODO Auto-generated method stub
// Creating JSON Parser instance
JSONObjParser jParser = new JSONObjParser();
// getting JSON string from URL
JSONArray json = jParser.getJSONFromUrl(url);
try
for (int i = 0; i < json.length(); i++)
JSONObject c = json.getJSONObject(i);
// Storing each json item in variable
String NAME=c.getString("restaurantNAME");
yourData.add(new Item(NAME));
catch (JSONException e)
// TODO Auto-generated catch block
e.printStackTrace();
return null;
@Override
protected void onPostExecute(Void result)
// TODO Auto-generated method stub
super.onPostExecute(result);
progressDialog.dismiss();
ListView yourListView = (ListView) findViewById(R.id.listViewID);
ListAdapter customAdapter = new ListAdapter(MainActivity.this, R.layout.itemlistrow, yourData);
yourListView.setAdapter(customAdapter);
yourListView.setOnItemClickListener(new OnItemClickListener()
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id)
// When clicked, show a toast with the TextView text
if(position == 0)
//code specific to first list item
Intent myIntent = new Intent(MainActivity.this,CopperChimneyDesc.class);
startActivity(myIntent);
else if(position == 1)
//Intent myIntent = new Intent(MainActivity.this,AroyDesc.class);
//startActivity(myIntent);
);
item.java
public class Item
private String Name;
public Item(String name)
this.Name = name;
public String getName()
return Name;
谢谢,
【问题讨论】:
所以您尝试传递您在列表视图中单击的餐厅名称 在onItemClick中,您可以使用:Item item = yourData.get(position);现在可以使用intent.putExtra来传递这个item了,顺便问下这个Item对象长什么样子 我已经更新了项目对象在问题中的样子......请看一下......我尝试了你的解决方案,我在 putextra 行中得到错误The method putExtra(String, boolean) in the type Intent is not applicable for the arguments (String, Item)
好的,所以你会这样做 String item = yourData.get(position).getName();然后您可以使用以下方法将字符串添加到意图:intent.putExtra("restaurent", item);
在另一端,如果它的文本视图你会 textView.setText(getIntent().getExtras().getString("restaurent"));我会纠正这个答案,如果我解决了你的问题,请标记它是正确的
【参考方案1】:
好的,你会这样做的
String item = yourData.get(position).getName();
然后您可以使用以下命令将string
添加到intent
:
intent.putExtra("restaurent", item);
另一方面,如果它的textview
你会这样做
textView.setText(getIntent().getExtras().getString("restaurent"));
【讨论】:
谢谢,您的解决方案很有魅力:)【参考方案2】:intent.putExtra("City Name", String.valueOf(lvCity.getSelectedItem()));
试试这个来投射。
【讨论】:
【参考方案3】:您可以使用 putxtera 方法打包数据并将其发送到其他活动。请参阅How to store values in onSaveInstanceState() and retrive?
【讨论】:
【参考方案4】:由于您在用户单击的列表视图中拥有项目的索引,因此您可以从适配器获取项目值:
String value = (String)customAdapter.getItem(position);
Intent myIntent = new Intent(MainActivity.this,CopperChimneyDesc.class);
intent.putExtra("restaurant_name", value);
startActivity(myIntent);
【讨论】:
我尝试了您的解决方案,但出现错误Cannot cast from item to string
....关于如何解决此问题的任何想法【参考方案5】:
您可以将数据保存在sharedPreferences
中,并可以从其他活动中访问它。只是一个想法:)
【讨论】:
但是如何从列表视图中获取数据(JSON)并将其存储在字符串中......有什么想法吗? 如果数据是静态的,比如session_key
,我认为SharePreference
是可行的方法。
mJsonString = downloadFileFromInternet(urls[0]); if(mJsonString == null /*|| mJsonString.isEmpty()*/) 返回 false; JSONObject jObject = null;尝试 jObject = new JSONObject(mJsonString); JSONArray jsonImageArray = jObject.getJSONArray("imageTarget");以上是关于将活动之间的数据从列表视图传递到另一个活动的主要内容,如果未能解决你的问题,请参考以下文章
将数据从列表视图(从 Rest Api 生成)传递到另一个活动并将其保存到 SQLite 数据库中