2017-06-30 6 views
-1

私はアンドロイドプログラミングの新人ですが、できる限り毎回新しいことを学びたいと思っています。私の質問についてはウェブサイトでたくさんのものを読みましたが、私のために現時点では。私が知りたかったのは、私が外部APIから集めたリストビューのデータをどのように送信し、アイテムをクリックして別のアクティビティに送信するのか、そして新しいアクティビティでそれを取得する方法と、たとえば、 ...私はJSONデータなしでいくつかの例を行いましたが、それはかなり簡単ですが、なんらかの理由で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

getIntent()。getSerializableExtra( "data"); txtTitle =(TextView)findViewById(R.id.tv_title2); txtTitle.setText(String.valueOf(item.getTitle())); – CodePT

答えて

0

でこれを行うことにより、各アクティビティでの参照を保持し、あなたの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でデータを取得

いくつかのいずれかが、あなたは、単に 項目項目=(項目)で、あなたのデータを取得することができ、新たな活動に、cancit答えを使用して、今後の参考のために必要とするだけの場合には
Item item = (Item) getIntent().getSerializableExtra("data"); 
+0

あなたの返信をありがとう、私はアダプタまたはアレイを使用する必要がありますか? 私の2回目のアクティビティでは、私は何かを持っているはずです アイテムアイテム=(Item)getIntent()。getSerializableExtra( "data"); txtTitle =(EditText)findViewById(R.id.tv_title2); txtTitle = item.getTitle()。toString() これでリストビューをクリックする各位置の項目からすべての情報を取得できますか? serializableを実装するときに、私のアイテムクラス内にいくつかの追加ステップを追加するか、実装する必要がありますか?ありがとうございます。 – CodePT

+0

@ lusitanos13はい、配列にする必要があります。 Itemクラスに他のものを追加する必要はありません。あなたの説明どおりに動作します。 – cancit

+0

うわー、その実際にはシンプルな、ありがとう、私のイメージを送信し、私のリストにない値を送信する方法を把握する必要があります、ありがとう、あまりにもありがとう! – CodePT

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; 
} 
} 

それからちょうど更新

public class Item implements Serializable{ 
... 
} 

その後、あなたのアイテムのクラスのSerializableを実装

onCreate() { 
    model = Model.getInstance(); 
} 
関連する問題