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