2017-01-21 5 views
0

Извините, если вопрос типа немного NEWSBIE, но я не известно :(AndroidAndroid List View - По щелчку перейти на сайт

Так я имею MainActivity.Java, заполняющую TextView я выборки данных. от сервера с помощью JSON, и это дает параметры, как идентификатор, имя пользователя, сообщение, DATE_TIME, статус, тип то, что я хочу на каждый щелчок элемента списка, он идет на сайт следующим образом:.

http://my_web_site_url/json?id=id_of_the_list_item&status=something

т.е. когда пользователь нажимает на один элемент списка, URL-адрес перенаправляется с использованием того же идентификатора, который извлекается JSON и имеет значение E Пункт списка.

Как установить, а затем получить каждый list_item_id и как перейти на сайт?

Любая помощь ценится!

Мой код:

package something; 

import android.app.ProgressDialog; 
import android.content.Intent; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.SimpleAdapter; 
import android.widget.Toast; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.util.ArrayList; 
import java.util.HashMap; 

public class MainActivity extends AppCompatActivity { 

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

private ProgressDialog pDialog; 
private ListView lv; 

// URL to get contacts JSON 
private static String url = "my_website_that_returns_json_data"; 

ArrayList<HashMap<String, String>> contactList; 

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

    contactList = new ArrayList<>(); 

    lv = (ListView) findViewById(R.id.list); 
    new GetContacts().execute(); 
} 

/** 
* 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 { 
       JSONObject jsonObj = new JSONObject(jsonStr); 

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

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

        String id = c.getString("id"); 
        String username = c.getString("username"); 
        String message = c.getString("message"); 
        String date_status = "Date: " + c.getString("date_time") + " Status: " + c.getString("status"); 


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

        // adding each child node to HashMap key => value 
        result1.put("id", id); 
        result1.put("username", username); 
        result1.put("message", message); 
        result1.put("date_status", date_status); 

        // adding contact to contact list 
        contactList.add(result1); 
       } 
      } 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[]{"username", "message", 
       "date_status"}, new int[]{R.id.username, 
       R.id.message,R.id.date_status}); 

     lv.setAdapter(adapter); 

    } 

} 
} 
+0

использование lv.itemOnClickListner –

+0

Можете ли вы дать полный синтаксис? Я новичок, поэтому я не знаю, где и как это сделать! – Webmaster

ответ

1

Использование onItemClickListener в вашей ListView

пример с использованием внутреннего класса

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick((AdapterView<?> parent, 
      View view, 
      int position, 
      long id)) { 


     String item = lv.getItemAtPosition(position); 
     Toast.makeText(this,"You selected : " + item,Toast.LENGTH_SHORT).show(); 


     } 
    }); 

в методе вы получите положение ваших данных и загрузить ссылку.

+0

Привет @Webmaster не могли бы вы принять ответ, если он вам помог? –

+0

Я получаю сообщение об ошибке - 'Can not resovle symbol" position "' – Webmaster

+0

обновите свой вопрос, чтобы я мог видеть ваш метод onitemclick –