将数据从 json 对象列表视图传递到新活动



我是Android编程的新手,但只要有可能,我就想学习一些新东西,我已经在网站上阅读了很多关于我的问题的东西,但目前对我来说似乎有点困惑。我想知道的是,我如何从从外部 API 填充的列表视图中发送数据,并在项目单击时将其发送到另一个活动,以及在新活动上如何检索它,例如将其设置在某些编辑文本上......我已经做了一些没有JSON数据的例子,它相当容易,但由于某种原因,我发现使用JSON数据很难。将不胜感激任何帮助

public class MainActivity extends AppCompatActivity {
private static final String 
url="https://prokampo.000webhostapp.com/teste.php";
private ProgressDialog dialog;
private List<Item> array = new ArrayList<Item>();
private ListView listView;
private Adapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.list_item);
adapter = new Adapter(this, array);
listView.setAdapter(adapter);
dialog = new ProgressDialog(this);
dialog.setMessage("Loading...");
dialog.show();
sendRequest();
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
Intent i = new Intent(MainActivity.this, DadosLista.class);
i.putExtra("data", adapter.toString());
startActivity(i);
}
});
}


//Creat volley request obj
private void sendRequest(){
JsonArrayRequest jsonArrayRequest=new JsonArrayRequest(url, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
hideDialog();
//parsing json
for(int i=0;i<response.length();i++){
try{
JSONObject obj=response.getJSONObject(i);
Item item=new Item();
item.setTitle(obj.getString("title"));
item.setImage(obj.getString("image"));
item.setRate(obj.getString("rating"));
item.setYear(obj.getString("releaseYear"));
//genre is json array
/*   JSONArray genreArray=obj.getJSONArray("genre");
ArrayList<String> genre=new ArrayList<String>();
for(int j=0;j<genreArray.length();j++){
genre.add((String) genreArray.get(j));
}
item.setGenre(genre);
*/
//add to array
array.add(item);
}catch(JSONException ex){
ex.printStackTrace();
}
}
adapter.notifyDataSetChanged();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
AppController.getmInstance().addToRequesQueue(jsonArrayRequest);
}

在项目类中实现可序列化

public class Item implements Serializable{  
...
}

然后更新您的 onItemClickListener

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
Intent i = new Intent(MainActivity.this, DadosLista.class);
i.putExtra("data", array.get(position));
startActivity(i);
}
});

在 DadosLista 类的 onCreate 中检索数据

Item item = (Item) getIntent().getSerializableExtra("data");

您应该保留一个存储数据的单例模型。这样,您可以轻松地在活动之间使用相同的数据。

如果像这样实现它,则可以将用户在列表中单击的位置传递给下一个活动。在下一个活动中,只需从给定位置的列表中获取项目即可。

喜欢这个:

public class Model {
private static Model model;
private ArrayList<Item> items;
private Model() {
items = new ArrayList();
}
public static Model getInstance() {
if(model == null) model = new Model();
return model;
}

public ArrayList<Item> getItems() {
return items;
}
public void setItems(ArrayList<Item> items) {
this.items = items;
}
}

然后只需在每个活动中保留一个引用,方法是在

onCreate() {
model = Model.getInstance();
}

最新更新