2014-04-07 6 views
1

응용 프로그램을 만들고 있습니다. 웹상의 Json 파일에서 정보를 얻고 싶습니다. 이 작동합니다. 지금은 콘텐츠와 함께 listview의 항목에 onItemClickListener를 갖고 싶습니다. onItemClickListener는 클릭 한 목록의 정보를 내 새 활동으로 보내야합니다.onItemClickListener가있는 응용 프로그램이 작동하지 않습니다.

내 MainActiviy.java의 코드는 다음과 같습니다

package com.jitesh.androidjsonparser; 

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

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

import android.app.ListActivity; 
import android.app.ProgressDialog; 
import android.content.Context; 
import android.content.Intent; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.SimpleAdapter; 
import android.widget.TextView; 


public class MainActivity extends ListActivity { 
    private Context context; 
    private static String url = "http://docs.blackberry.com/sampledata.json"; // URL VAN HET JSON BESTAND 

    private static final String TAG_VTYPE = "vehicleType"; //VELDEN UIT DE JSON HALEN 
    private static final String TAG_VCOLOR = "vehicleColor"; 
    private static final String TAG_FUEL = "fuel"; 
    private static final String TAG_TREAD = "treadType"; 
    private static final String TAG_OPERATOR = "approvedOperators"; 
    private static final String TAG_NAME = "name"; 
    private static final String TAG_POINTS = "experiencePoints"; 

    ArrayList<HashMap<String, String>> jsonlist = new ArrayList<HashMap<String, String>>(); 

    ListView lv ; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     new ProgressTask(MainActivity.this).execute(); 
    } 

    private class ProgressTask extends AsyncTask<String, Void, Boolean> { 
     private ProgressDialog dialog; 

     private ListActivity activity; 

     // private List<Message> messages; 
     public ProgressTask(ListActivity activity) { 
      this.activity = activity; 
      context = activity; 
      dialog = new ProgressDialog(context); 
     } 

     /** progress dialog to show user that the backup is processing. */ 

     /** application context. */ 
     private Context context; 

     protected void onPreExecute() { 
      this.dialog.setMessage("Progress start"); 
      this.dialog.show(); 
     } 

     @Override 
     protected void onPostExecute(final Boolean success) { 
      if (dialog.isShowing()) { 
       dialog.dismiss(); 
      } 
      ListAdapter adapter = new SimpleAdapter(context, jsonlist, 
        R.layout.list_item, new String[] { TAG_VTYPE, TAG_VCOLOR, 
          TAG_FUEL, TAG_TREAD }, new int[] { 
          R.id.vehicleType, R.id.vehicleColor, R.id.fuel, 
          R.id.treadType }); 

      setListAdapter(adapter); 

      // selecting single ListView item 
      lv = getListView();    
     } 

     protected Boolean doInBackground(final String... args) { 

      JSONParser jParser = new JSONParser(); 

      // getting JSON string from URL 
      JSONArray json = jParser.getJSONFromUrl(url); 

      for (int i = 0; i < json.length(); i++) { 

       try { 
        JSONObject c = json.getJSONObject(i); 
        String vtype = c.getString(TAG_VTYPE); 

        String vcolor = c.getString(TAG_VCOLOR); 
        String vfuel = c.getString(TAG_FUEL); 
        String vtread = c.getString(TAG_TREAD); 

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

        // adding each child node to HashMap key => value 
        map.put(TAG_VTYPE, vtype); 
        map.put(TAG_VCOLOR, vcolor); 
        map.put(TAG_FUEL, vfuel); 
        map.put(TAG_TREAD, vtread); 
        jsonlist.add(map); 
       } catch (JSONException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
      return null; 

     } 


    } 

} 

사람이 onItemClickListener와 나는이 onItemClickListener를 설정해야하는 장소에 나를 도와 드릴까요?

@Override protected void onListItemClick(ListView lv, View v, int position, long id) {  
     Intent i = new Intent(getApplicationContext(), single_list_item_view.class);  
     String vehicleType = ((TextView) v).getText().toString(); 
     i.putExtra("TAG_VTYPE", vehicleType); 
     startActivity(i); 
} 
+0

사용 - [링크] (http://www.vogella.com/tutorials/AndroidListView/article.html) – prakash

+0

당신은 아마 HTTP를 조회하려면 : // 개발자. android.com/reference/android/app/ListActivity.html#onListItemClick%28android.widget.ListView%20android.view.View,%20int,%20long%29 – Bex

답변

3

당신은 ListActivity을 확장하고 있습니다, 그래서 당신은 onItemClickListener 필요하지 않습니다. onListItemClick(ListView l, View v, int position, long id)을 직접 무시할 수 있습니다. 이 메소드는 목록의 항목이 선택 될 때 호출됩니다. 당신이에서 onCreate했던 것처럼

, 당신은 당신이 해시 맵의 ArrayList를을 만들 필요가 onListItemClick

@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 
    Intent i = new Intent(this, single_list_item_view.class);  
    HashMap<String, String> itemPressed = (HashMap<String, String>)l.getItemAtPosition(position); 
    String vehicleType = itemPressed.get(TAG_VTYPE); 
    i.putExtra("TAG_VTYPE", vehicleType); 
    startActivity(i); 
} 
+0

안드로이드를 처음 접했으므로 예제를 제공해 줄 수 있습니까? 무슨 뜻이야? – Arno

+0

나는 내 대답을 편집했습니다 – Blackbelt

+0

지금이 코드를 삽입했지만 작동하지 않습니다. listitem을 클릭하면 응용 프로그램이 충돌합니다. '@Override \t 보호 된 void onListItemClick (ListView lv, 뷰 v, int 위치, 긴 ID) { 의도 i = 새 의도 (getApplicationContext(), single_list_item_view.class); \t \t String vehicleType = ((TextView) v) .getText(). toString(); \t \t // 데이터를 새로운 활동으로 전송 i.putExtra ("TAG_VTYPE", vehicleType); startActivity (i); \t} ' – Arno

0

에 대해 동일한 작업을 수행 할 수 있습니다. 이 링크 - 당신을 도울 수

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

        String name =urarraylist.get(position).get("name");// here you have to pas keynawhich is put inyour Hashmap arraylist 

        Intent i = new Intent(getBaseContext(),anotheractivity.class); 
        i.putExtra("name", name); 

        startActivity(i); 
       } 
      }); 
관련 문제