我是Android编程的新手,但是我尽可能地学习一些新的东西,我在网站上阅读了很多关于我的问题的东西,但目前看来我有点困惑。我想知道的是如何从我的listview发送数据,我从外部API填充并将项目点击发送到另一个活动,以及新活动如何检索它,例如在一些edittext上设置它...我已经做了一些没有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);
}
答案 0 :(得分:0)
您应该保留用于存储数据的单例模型。这样,您可以在活动之间轻松使用相同的数据。
如果您像这样实现它,则可以将用户在列表中单击的位置传递给下一个活动。在下一个活动中,只需从给定位置的列表中获取项目。
像这样:
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();
}
答案 1 :(得分:0)
在您的商品类
中实施Serializablepublic 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");