2017-01-06 8 views
0

Blogger APIを使用して、ブログのトレンド記事のタイトルをリストビューに表示しています。 JSONレスポンスでは、対応する投稿のURLも取得します。私がしたいのは、この対応するURLをタイトルに追加することです。ユーザーがタイトルをクリックすると、リンクされた投稿がブラウザで開きます。 これをどうすれば実現できますか?解析されたJsonデータにURLを追加する

マイMainActivity.java

パブリッククラスMainActivityはあなたのListViewアダプタであなたのタイトルをOnClickListenerを追加する必要がありますAppCompatActivity {

private String TAG = MainActivity.class.getSimpleName(); 

private ProgressDialog pDialog; 
private ListView lv; 

    // URL to get contacts JSON 
    String baseUrl = "https://www.googleapis.com/blogger/v2/blogs/6648452808939065157/posts"; 
    String apiKey = "?key=" + BuildConfig.API_KEY; 
    String blogUrl = (baseUrl.concat(apiKey)); 

    //ArrayList<HashMap<String, String>> contactList; 
    ArrayList<HashMap<String, String>> itemList; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     //contactList = new ArrayList<>(); 
     itemList = new ArrayList<>(); 

     lv = (ListView) findViewById(R.id.list); 

     new GetItems().execute(); 
    } 

    public void item_click(View view) { 
     startActivity(new Intent(this, ContentActivity.class)); 
    } 

    /** 
    * Async task class to get json by making HTTP call 
    */ 
    private class GetItems 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(blogUrl); 
      Log.e(TAG, "Response from url: " + jsonStr); 

    if (jsonStr != null) { 
       try { 
        JSONObject jsonObj = new JSONObject(jsonStr); 

        // Getting JSON Array node 
        JSONArray items = jsonObj.getJSONArray("items"); 

        // looping through Latest Articles 
        for (int i = 0; i < 1; i++) { 
         JSONObject c = items.getJSONObject(i); 

         String title = c.getString("title"); 
         String post_url = c.getString("url"); 




         HashMap<String, String> item = new HashMap<>(); 

         // adding each child node to HashMap key => value 

         item.put("title", title); 
         item.put("url",post_url); 

         // adding item to article list 
         itemList.add(item); 
        } 
       } 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, 
        itemList,R.layout.list_item, new String[]{"title"}, 
        new int[]{R.id.title}); 

      lv.setAdapter(adapter); 
     } 

    } 
} 
+1

外部リンクを提供するのではなく、質問を編集して関連コードを追加してください。この改善は、あなたの質問の将来の読者が、将来そのリンクが機能しなくて、同様の問題を抱えている場合の回答を見つけるのに役立ちます。 – petey

+0

完了...コードを追加 –

答えて

0

を拡張します。これは、yourTextView.setClickable(true);に続いてyourTextView.setOnClickListener(clickListener);を設定することで簡単に達成できます。

hashedMap itemListの解析済みJSONデータをSimpleAdapterコンストラクタに渡したことがわかりました。 SimpleAdapterOnClickListenerにはWebViewを使用し、HashMapからURLを取得して表示することができます。クリックした位置はgetAdapterPosition()で取得できます。 SimpleAdapterコードであなたの投稿を更新することも役に立ちます。

+0

はい、同じでした! –

+0

Well done @ N.Lucas –

関連する問題