2015-11-03 26 views
0

我做了一個應用程序,從我的服務器獲取JSON文件,並在屏幕上顯示內容通過適配器在列表視圖中很好!我想創建一個onClick listner,它獲取已在listview中單擊的項目(0,1,2,3等)的編號,並創建另一個活動的意圖(併發送該編號)..我已經在其他問題上嘗試了幾個建議,但我無法讓他們工作..有人可以幫助我嗎?我似乎無法找到正確的解決方案:/創建一個列表視圖與列表視圖arrayAdapter意圖到其他屏幕

Recepten.java

public class Recepten extends Activity { 

ListView list; 
ReceptenAdapter adapter; 
ArrayList<ReceptenDefine> receptenList; 

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

    list = (ListView)findViewById(R.id.receptenList); 
    receptenList = new ArrayList<>(); 

    new ReceptenAsynTask().execute("http://janvandijk.me/zooi/receptenapp/getrecipes.php?type=request&datatype=recepten"); 
} 


public class ReceptenAsynTask extends AsyncTask<String, Void, Boolean> { 

    @Override 
    protected Boolean doInBackground(String... params) { 
     try { 
      HttpClient client = new SystemDefaultHttpClient(); 
      HttpPost post = new HttpPost(params[0]); 
      HttpResponse response = client.execute(post); 

      int status = response.getStatusLine().getStatusCode(); 

      if (status == 200){ 
       HttpEntity entity = response.getEntity(); 
       String data = EntityUtils.toString(entity); 

       JSONArray jArray = new JSONArray(data); //jArray.length() 
       for (int i=0; i<jArray.length(); i++){ 
        ReceptenDefine recept; 
        recept = new ReceptenDefine(); 

        JSONObject jRealObject = jArray.getJSONObject(i); 

        recept.setReceptnaam(jRealObject.getString("naam")); 
        recept.setReceptauthor("Recept van: " + jRealObject.getString("unaam")); 
        recept.setReceptimageurl(jRealObject.getString("imgurl")); 
        recept.setReceptrating("Aantal sterren: " + jRealObject.getString("id")); 

        receptenList.add(recept); 

       } 
       return true; 


      } 

     } catch (JSONException | IOException e) { 
      e.printStackTrace(); 
     } 
     return false; 
    } 

    @Override 
    protected void onPostExecute(Boolean result){ 
     super.onPostExecute(result); 

     if(!result){ 
      //Show message that data wasn't parsed 
     } else { 
      ReceptenAdapter adapter = new ReceptenAdapter(getApplicationContext(), R.layout.row, receptenList); 
      list.setAdapter(adapter); 
     } 



    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_recepten, menu); 

    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 

     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

Receptendefine.java

public class ReceptenDefine{ 
private String receptnaam; 
private String receptauthor; 
private String receptimageurl; 
private String receptrating; 

public ReceptenDefine(){ 

} 

public String getReceptnaam() { 
    return receptnaam; 
} 

public void setReceptnaam(String receptnaam) { 
    this.receptnaam = receptnaam; 
} 

public String getReceptauthor() { 
    return receptauthor; 
} 

public void setReceptauthor(String receptauthor) { 
    this.receptauthor = receptauthor; 
} 

public String getReceptimageurl() { 
    return receptimageurl; 
} 

public void setReceptimageurl(String receptimageurl) { 
    this.receptimageurl = receptimageurl; 
} 

public String getReceptrating() { 
    return receptrating; 
} 

public void setReceptrating(String receptrating) { 
    this.receptrating = receptrating; 
} 

ReceptenAdapter.java

public class ReceptenAdapter extends ArrayAdapter<ReceptenDefine>{ 

ArrayList<ReceptenDefine> ArrayListRecepten; 
int Resource; 
Context context; 
LayoutInflater vi; 


public ReceptenAdapter(Context context, int resource, ArrayList<ReceptenDefine> objects) { 
    super(context, resource, objects); 

    ArrayListRecepten = objects; 
    Resource = resource; 
    this.context = context; 

    vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); //Verschillende items laten zien 

} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    ViewHolder holder; 

    if(convertView == null){ 
     //Eerste listview item wordt gemaakt 
     convertView = vi.inflate(Resource, null); 
     holder = new ViewHolder(); 

     //Set all textview and imageview dingen 



     holder.listImage = (ImageView)convertView.findViewById(R.id.listImage); 
     holder.listAuthor = (TextView)convertView.findViewById(R.id.listAuthor); 
     holder.listName = (TextView)convertView.findViewById(R.id.listName); 
     holder.listRating = (TextView)convertView.findViewById(R.id.listRating); 

     //Zet het neer 
     convertView.setTag(holder); 
    } else { 
     //volgende list items, doe alles opnieuw zetten 
     holder = (ViewHolder)convertView.getTag(); 
    } 

    new DownloadImageTask(holder.listImage).execute(ArrayListRecepten.get(position).getReceptimageurl()); 
    holder.listName.setText(ArrayListRecepten.get(position).getReceptnaam()); 
    holder.listAuthor.setText(ArrayListRecepten.get(position).getReceptauthor()); 
    holder.listRating.setText(ArrayListRecepten.get(position).getReceptrating()); 
    return convertView; 
} 

static class ViewHolder { 
    public ImageView listImage; 
    public TextView listName; 
    public TextView listAuthor; 
    public TextView listRating; 
} 

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { 
    ImageView bmImage; 

    public DownloadImageTask(ImageView bmImage) { 
     this.bmImage = bmImage; 
    } 
    protected Bitmap doInBackground(String... urls) { 
     String urldisplay = urls[0]; 
     Bitmap mIcon = null; 
     try { 
      InputStream in = new java.net.URL(urldisplay).openStream(); 
      mIcon = BitmapFactory.decodeStream(in); 
     } catch (Exception e) { 
      Log.e("Error", e.getMessage()); 
      e.printStackTrace(); 
     } 
     return mIcon; 
    } 

    protected void onPostExecute(Bitmap result) { 
     bmImage.setImageBitmap(result); 
    } 
} 

回答

0

在您的onCreate()中:

list.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    // do stuff ('position' is the position of the item you've clicked on) 
    } 
});