2013-02-19 53 views
1

我有一个ArticlesAdapter,我正在使用它来读取远程JSON数据。适配器正在工作,但我努力让我的ListView setonitemclicklister工作。Android setonitemclicklistener实现

我想要完成的是能够点击ListItem并获得点击选项的文章数据。 我有我的文章类中的getName()函数,我需要调用以响应ListItem点击,但我似乎无法找到一种方法来实现它。

我想在我的AsyncTask类中做到这一点。

使用下面的代码:

protected void onPostExecute(JSONArray result) { 
      // TODO Auto-generated method stub 

      Log.i("CHECK", "RESULTS: " + result); 

      List<Article> articles = new ArrayList<Article>(); 

      String title = null; 
      String nid = null; 

      try{ 
       for(int i=0; i < data.length(); i++){ 
        JSONObject dataObj = (JSONObject)data.get(i); 
        JSONObject record = dataObj.getJSONObject("node"); 
        title = (record.getString("title")); 
        nid = (record.getString("nid")); 

        Log.i("FOUND", "title: " + title); 
        Log.i("FOUND", "nid: " + nid); 

        articles.add(new Article(title, "", Integer.parseInt(nid))); 
       } 
      }catch(JSONException j){ 
       Log.e("CHECK", "Attempting to read data returned from JSONReader: " + j.toString()); 
      } 

      ListView articlesList = (ListView)findViewById(R.id.articlesList); 
      ArticleAdapter adapter = new ArticleAdapter(ArticlesActivity.this, R.layout.article_item, articles); 
      articlesList.setAdapter(adapter); 

      articlesList.setOnItemClickListener(new OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> parent, View view, int position, long id){ 
        // TODO Auto-generated method stub 
        Toast.makeText(getApplicationContext(), "testing : ", Toast.LENGTH_LONG); 
        Log.i("CHECK", "AdapterView: " + parent); 
        Log.i("CHECK", "VIEW : " + view); 
        Log.i("CHECK", "POSITION : " + position); 
        Log.i("CHECK", "ID : " + id); 
       } 
      }); 

      if(dialog.isShowing()) 
       dialog.dismiss(); 
     } 

我的问题是我不知道如何让setOnItemClickListener工作。 我能够通过日志功能打印参数:

Log.i("CHECK", "AdapterView: " + parent); 
Log.i("CHECK", "VIEW : " + view); 
Log.i("CHECK", "POSITION : " + position); 
Log.i("CHECK", "ID : " + id); 

...但我得到的错误,当我尝试铸造任何参数为文章对象,以便我可以调用它的getName()函数等。

+0

我对你的问题有点困惑,你究竟在你的OnItemClickListener中完成了什么? – 2013-02-19 23:46:19

+0

我更新了我的问题 – sisko 2013-02-19 23:55:16

+0

然后Sam的回答对你正在努力完成的事情是正确的。 – 2013-02-20 00:01:08

回答

3

你的AsyncTask似乎嵌套在你的活动,如果它不是简单地传递articles你的活动,然后使用:

articlesList.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id){ 
     Article article = articles.get(position); 
     // Do something with article 
    } 
}); 
+0

我的AsyncTask确实嵌套在我的Activity类中。另外,onclick监听器位于AsynchTask类中。由于我对此相当陌生,我不清楚这是否是正确的策略,但该应用程序仍然适用于onclicklistener例外 – sisko 2013-02-19 23:59:59

+0

我尝试了您的代码,但它正确地抱怨在我的文章中没有定义get()函数class – sisko 2013-02-20 00:07:37

+0

不是'article.get()',而是'articles.get()'。 'get()'是一个List的方法,所以你问你的'ArrayList

'是否适合文章。注意区别? – Sam 2013-02-20 02:06:12

0

,你会想要做一个建筑的变化,拉你ListViewAdapterOnItemClickListener初始化出AsyncTask,只更新articles以及通知Adapter中的onPostExecute回调。