2017-12-25 2 views
0

Ich möchte die ID des ausgewählten Artikels in der Listenansicht erhalten, wo die Daten vom Server kommen. Alles funktioniert gut, aber ich kann keine ID an die nächste Aktivität senden, um den ausgewählten Inhalt anzuzeigen. Ich habe diese Zeile:Wie bekomme ich die ausgewählte Artikel-ID in der Listenansicht

String number_of_keys = (lv.getItemAtPosition(position).toString()); 

aber alle Elemente in der Zeile zurückgeben :( hier mein Code dank

import android.app.ProgressDialog; 
import android.content.Intent; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.text.Editable; 
import android.text.TextWatcher; 
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 MainActivity2 extends AppCompatActivity implements TextWatcher { 
    public String number_of_keys; 

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

    private ProgressDialog pDialog; 
    private ListView lv; 
    private String id; 


    // URL to get contacts JSON 
    private static String url = "http://farazjou.com/mobile/drugstore"; 

    ArrayList<HashMap<String, String>> drugstoreList; 

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

     drugstoreList = new ArrayList<>(); 

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

     new GetDrugs().execute(); 
     lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) { 


       Intent i = new Intent(getApplicationContext(), SecondActivity.class); 
       String number_of_keys = (lv.getItemAtPosition(position).toString()); 

       i.putExtra("number_of_keys", number_of_keys); 

       startActivity(i); 

      } 
     }); 
    } 

    @Override 
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

    } 

    @Override 
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

    } 

    @Override 
    public void afterTextChanged(Editable editable) { 

    } 

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

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

     } 

     @Override 
     public 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 drugstore = jsonObj.getJSONArray("drugstore"); 

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

         id = c.getString("id"); 
         String post_title = c.getString("post_title"); 
         String public_title = c.getString("public_title"); 


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


         drug.put("id", id); 
         drug.put("post_title", post_title); 
         drug.put("public_title", public_title); 
         drugstoreList.add(drug); 
        } 
       } 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(
        MainActivity2.this, drugstoreList, 
        R.layout.list_item2, new String[]{"post_title", "public_title", "id"} 
        , new int[]{R.id.post_title, R.id.public_title , R.id.public_id}); 



      lv.setAdapter(adapter); 



     } 

    } 
} 

Antwort

0

Sie die Click-Handler, anstatt Select Handler Implementierung einer Liste.. standardmäßig annehmen, nicht Auswahl haben.

Probieren sie es durch folgende Art und Weise,

public void onItemClick(AdapterView<?> adapter, View v, int position, long id) { 
    MyClass item = (MyClass) adapter.getItem(position); 
} 
Verwandte Themen