Android SetonicClickListener实现

Android SetonicClickListener实现,android,android-asynctask,onclicklistener,Android,Android Asynctask,Onclicklistener,我有一个ArticlesAdapter,用于读取远程JSON数据。适配器正在工作,但我正在努力使我的ListView setonitemclicklister工作 我试图实现的是单击列表项并获取所单击选项的文章数据的功能。 我的文章类中有一些函数,如getName(),我需要调用这些函数来响应ListItem的单击,但我似乎找不到实现它的方法。 我正试图在AsyncTask类中实现这一点 使用以下代码: protected void onPostExecute(JSONArray result)

我有一个ArticlesAdapter,用于读取远程JSON数据。适配器正在工作,但我正在努力使我的ListView setonitemclicklister工作

我试图实现的是单击列表项并获取所单击选项的文章数据的功能。 我的文章类中有一些函数,如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();
        }

…但当我尝试将任何参数强制转换到Article对象中,以便调用其getName()函数等时,会出现错误。

您的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
    }
}); 
articlesList.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
Article=articles.get(位置);
//用这篇文章做点什么
}
}); 

您想要做的架构更改是拉动您的
列表视图
适配器
,和
OnItemClickListener
初始化退出
AsyncTask
,只更新
文章
,并在
onPostExecute
回调中通知
适配器。

我对你的问题有点困惑,你到底想在你的监听器中完成什么?我更新了我的问题,然后Sam的答案与你想完成的是正确的。我的AsyncTask确实嵌套在我的Activity类中。此外,onclick侦听器位于AsynchTask类中。由于我对这一点还不太熟悉,我不太清楚这是否是正确的策略,但除了OnClickListener外,该应用程序仍能正常工作。我尝试了你的代码,但它正确地抱怨在我的文章中没有定义get()函数classNot
Article.get()
但是
articles.get()
get()
是一种列表方法,因此您需要向
ArrayList
查询合适的文章。注意到区别了吗?
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
    }
});