2016-11-26 9 views
1

解析されたJSONデータのIDをリストビューにどのように割り当てることができますか?Androidは解析されたJSONデータのボタンIDをリストビューに与えます

現在、私はこの方法を持っている:

@Override 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 
     // Dismiss the progress dialog 
     if (pDialog.isShowing()) 
      pDialog.dismiss(); 
     /** 
     * Updating parsed JSON data into ListView 
     * */ 
     ListAdapter adapter = new SimpleAdapter(
       MainActivity.this, contactList, 
       R.layout.list_item, new String[]{"name", "description", 
       "release_at", "details" }, new int[]{R.id.name, 
       R.id.description, R.id.release_at}); 

     lv.setAdapter(adapter); 
    } 

私はそうのように、作成したボタンにIDを追加したい:

<Button 
     android:id="@+id/gameDetails"  // <- here I want to add my id 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 

その後、私は意図を作成し、ボタンを投稿したいですでidは新しいアクティビティに次のようになります。

public void openDetails(View view) { 
    String getContactId = new GetContacts().getButtonId(); 
    Intent paralaxActivityItent = new Intent(MainActivity.this, ParalaxToolbarActivity.class); 
    paralaxActivityItent.putExtra("id", id); // the button id 
    MainActivity.this.startActivity(paralaxActivityItent); 
} 

他のアクティビティでは、私が投稿するID。

私はアンドロイドに新しくなったので、それが正しいかどうかはわかりません。

編集:

これは私のアダプターです:

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> { 

    private List<String> friends; 
    private Activity activity; 
    private ArrayList<HashMap<String, String>> contactList; 

    public RecyclerAdapter(Activity activity, List<String> friends) { 
     this.friends = friends; 
     this.activity = activity; 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { 

     //inflate your layout and pass it to view holder 
     LayoutInflater inflater = activity.getLayoutInflater(); 
     View view = inflater.inflate(android.R.layout.simple_list_item_1, viewGroup, false); 
     ViewHolder viewHolder = new ViewHolder(view); 

     return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(RecyclerAdapter.ViewHolder viewHolder, int position) { 

     viewHolder.item.setText(friends.get(position)); 
    } 

    @Override 
    public int getItemCount() { 
     return (null != friends ? friends.size() : 0); 
    } 

    /** 
    * View holder to display each RecylerView item 
    */ 
    protected class ViewHolder extends RecyclerView.ViewHolder { 
     private TextView item; 

     public ViewHolder(View view) { 
      super(view); 
      item = (TextView) view.findViewById(android.R.id.text1); 
     } 
    } 

} 

MyGetContactクラス:

/** 
* Async task class to get json by making HTTP call 
*/ 
private class GetContacts extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     // Showing progress dialog 
     pDialog = new ProgressDialog(MainActivity.this); 
     pDialog.setMessage("Please wait"); 
     pDialog.setCancelable(false); 
     pDialog.show(); 

    } 

    @Override 
    protected Void doInBackground(Void... arg0) { 
     HttpHandler sh = new HttpHandler(); 

     // Making a request to url and getting response 
     String jsonStr = sh.makeServiceCall(url); 

     Log.e(TAG, "Response from url: " + jsonStr); 

     if (jsonStr != null) { 
      try { 
       // Getting JSON Array node 
       JSONArray jsonArray = new JSONArray(jsonStr); 

       // looping through All Contacts 
       for (int i = 0; i < jsonArray.length(); i++) { 
        JSONObject c = jsonArray.getJSONObject(i); 

        String id = c.getString("id"); 
        String name = c.getString("name"); 
        String description = c.getString("description"); 
        String video_url = c.getString("video_url"); 
        String platform = c.getString("platform"); 
        String avaible = c.getString("avaible"); 
        String release_at = c.getString("release_at"); 

        // tmp hash map for single contact 
        HashMap<String, String> data = new HashMap<>(); 

        // adding each child node to HashMap key => value 
        data.put("id", id); 
        data.put("name", name); 
        data.put("description", description); 
        data.put("video_url", video_url); 
        data.put("platform", platform); 
        data.put("release_at", release_at); 

        // adding contact to contact list 
        contactList.add(data); 
       } 
      } catch (final JSONException e) { 
       Log.e(TAG, "Json parsing error: " + e.getMessage()); 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         Toast.makeText(getApplicationContext(), 
           "Json parsing error: " + e.getMessage(), 
           Toast.LENGTH_LONG) 
           .show(); 
        } 
       }); 

      } 
     } else { 
      Log.e(TAG, "Couldn't get json from server."); 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        Toast.makeText(getApplicationContext(), 
          "Couldn't get json from server. Check LogCat for possible errors!", 
          Toast.LENGTH_LONG) 
          .show(); 
       } 
      }); 

     } 

     return null; 
    } 
@Override 
protected void onPostExecute(Void result) { 
    super.onPostExecute(result); 
    // Dismiss the progress dialog 
    if (pDialog.isShowing()) 
     pDialog.dismiss(); 
    /** 
    * Updating parsed JSON data into ListView 
    * */ 
    ListAdapter adapter = new SimpleAdapter(
      MainActivity.this, contactList, 
      R.layout.list_item, new String[]{"name", "description", 
      "release_at", "details" }, new int[]{R.id.name, 
      R.id.description, R.id.release_at}); 

    lv.setAdapter(adapter); 
} 
+0

独自のアダプタクラスを作成する必要があります –

+0

私はアダプタクラスを持っていますが、続行する方法がわかりません。それを私の質問にも追加しますか? – utdev

+0

はい。 SimpleAdapterを持っているようですが、自分のアダプタクラスではありません。また、jsonデータも表示します。'GetContacts'のクラス定義は、それがアクティビティの場合は' new'ではないからです。 –

答えて

0

私はあなたの問題にアプローチする方法について、より良い方法があると思います。あなたが本当に(この場合はボタンに)ビューのIDを変更したい場合はしかし、その後、この

How can I assign an ID to a view programmatically?

1

私は本当に解析されたJSONデータがあるから、ボタンのビューIDを割り当てることはないと思う上のいくつかの素晴らしい説明があります良いアイデア。これについて

方法:

  1. 、JSONデータを取得し、それを解析し、そのデータを保持するためのデータ構造を設計し、私のexmapleでJsonDataModeのようなもの。

  2. jsonデータを解析して、リストなどのデータ構造をリストに追加します。

  3. ListView用にアダプタを設計して実装します。データリストでアダプタを初期化します。

  4. 子ビューにデータを格納できるように子ビューのタグを設定します。

  5. 子ビュー項目をクリックしたときにこのリストビューが反応するOnclickListenerが1つあります。

Full ListView Example

よし、みんな。これで▲をクリックできます。

+0

しかし、あなたは私に例を見せてもらえますか? – utdev

+0

@utdev大丈夫、私は完全な例を得た。より多くの質問がある場合は、私に知らせてください。ちなみに、この答えが役に立つ場合は、三角形アイコンをクリックして「この回答は役に立ちます」を選択してください。 ▲:D – shanwu

+0

チャットに移動しますか? – utdev

関連する問題