Android 无法设置listview文本
我正在使用json解析器将图像url和描述传递到我的listview中。现在我设法加载了图像,但是如何更改列表视图的文本?目前它只显示项目0、项目1等。。如何将描述传递到lazyadapter 主要活动:Android 无法设置listview文本,android,listview,text,Android,Listview,Text,我正在使用json解析器将图像url和描述传递到我的listview中。现在我设法加载了图像,但是如何更改列表视图的文本?目前它只显示项目0、项目1等。。如何将描述传递到lazyadapter 主要活动: public class MainActivity extends Activity { // CREATING JSON PARSER OBJECT JSONParser jParser = new JSONParser(); JSONArray guide = n
public class MainActivity extends Activity {
// CREATING JSON PARSER OBJECT
JSONParser jParser = new JSONParser();
JSONArray guide = null;
ListView list;
LazyAdapter adapter;
String[] mImageIds;
ArrayList<String> guideList =new ArrayList<String>();
ArrayList<String> descriptionList =new ArrayList<String>();
// GUIDE URL
private static String url_guide = "http://58.185.41.178/magazine_android/get_guide.txt";
private static final String TAG_GUIDES = "guides"; //the parent node of my JSON
private static final String TAG_DESCRIPTION = "description";
private static final String TAG_IMAGE = "image";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// LOADING Guide IN BACKGROUND THREAD
new LoadGuide().execute();
list=(ListView)findViewById(R.id.list);
adapter=new LazyAdapter(this,guideList);
list.setAdapter(adapter);
Button b=(Button)findViewById(R.id.button1);
b.setOnClickListener(listener);
}
@Override
public void onDestroy()
{
list.setAdapter(null);
super.onDestroy();
}
public OnClickListener listener=new OnClickListener(){
@Override
public void onClick(View arg0) {
adapter.imageLoader.clearCache();
adapter.notifyDataSetChanged();
}
};
/**
* Background Async Task to Load all product by making HTTP Request
* */
class LoadGuide extends AsyncTask<String, String, String> {
/**
* getting All videos from url
* */
protected String doInBackground(String... args) {
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
// getting JSON string from URL
JSONObject json = jParser.makeHttpRequest(url_guide, "GET", params);
// CHECKING OF JSON RESPONSE
Log.d("All guide: ", json.toString());
try {
guide = json.getJSONArray(TAG_GUIDES);
for (int i = 0; i < guide.length(); i++) {
JSONObject c = guide.getJSONObject(i);
//String title = c.getString(TAG_DESCRIPTION);
String image = c.getString(TAG_IMAGE);
String description = c.getString(TAG_DESCRIPTION);
guideList.add(image);
descriptionList.add(description);
System.out.println(guideList);
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(String file_url) {
// UPDATING UI FROM BACKGROUND THREAD
runOnUiThread(new Runnable() {
public void run() {
/**
* Updating parsed JSON data into ListView
* */
adapter.notifyDataSetChanged();
}
});
}
}
}
公共类MainActivity扩展活动{
//创建JSON解析器对象
JSONParser jParser=新的JSONParser();
JSONArray-guide=null;
列表视图列表;
懒散适配器;
字符串[]mimageid;
ArrayList guideList=新建ArrayList();
ArrayList descriptionList=新的ArrayList();
//指南URL
专用静态字符串url_guide=”http://58.185.41.178/magazine_android/get_guide.txt";
私有静态最终字符串标记_GUIDES=“GUIDES”//我的JSON的父节点
私有静态最终字符串标记_DESCRIPTION=“DESCRIPTION”;
私有静态最终字符串TAG_IMAGE=“IMAGE”;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//在后台线程中加载向导
新建LoadGuide().execute();
list=(ListView)findViewById(R.id.list);
适配器=新的LazyAdapter(本指南列表);
list.setAdapter(适配器);
按钮b=(按钮)findViewById(R.id.button1);
b、 setOnClickListener(listener);
}
@凌驾
公共空间
{
list.setAdapter(空);
super.ondestory();
}
public OnClickListener=new OnClickListener(){
@凌驾
公共void onClick(视图arg0){
adapter.imageLoader.clearCache();
adapter.notifyDataSetChanged();
}
};
/**
*通过发出HTTP请求加载所有产品的后台异步任务
* */
类LoadGuide扩展了异步任务{
/**
*从url获取所有视频
* */
受保护的字符串doInBackground(字符串…args){
//建筑参数
List params=new ArrayList();
//从URL获取JSON字符串
JSONObject json=jParser.makeHttpRequest(url_指南,“GET”,参数);
//检查JSON响应
Log.d(“所有指南:,json.toString());
试一试{
guide=json.getJSONArray(TAG_GUIDES);
对于(int i=0;i
图像适配器:
public class LazyAdapter extends BaseAdapter {
private Activity activity;
private ArrayList<String> data;
private static LayoutInflater inflater=null;
public ImageLoader imageLoader;
public LazyAdapter(Activity a, ArrayList<String> guideList) {
activity = a;
data=guideList;
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
imageLoader=new ImageLoader(activity.getApplicationContext());
}
public int getCount() {
return data.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
View vi=convertView;
if(convertView==null)
vi = inflater.inflate(R.layout.item, null);
TextView text=(TextView)vi.findViewById(R.id.text);;
ImageView image=(ImageView)vi.findViewById(R.id.image);
text.setText("item "+position);
imageLoader.DisplayImage(data.get(position), image);
return vi;
}
}
公共类LazyAdapter扩展了BaseAdapter{
私人活动;
私有数组列表数据;
专用静态充气机=空;
公共图像加载器;
公共LazyAdapter(活动a,ArrayList指南列表){
活动=a;
数据=指南清单;
充气器=(LayoutInflater)activity.getSystemService(Context.LAYOUT\u充气器\u SERVICE);
imageLoader=新的imageLoader(activity.getApplicationContext());
}
public int getCount(){
返回data.size();
}
公共对象getItem(int位置){
返回位置;
}
公共长getItemId(int位置){
返回位置;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
视图vi=转换视图;
if(convertView==null)
vi=充气机充气(R.layout.item,空);
TextView text=(TextView)vi.findViewById(R.id.text);;
ImageView图像=(ImageView)vi.findViewById(R.id.image);
text.setText(“项目”+位置);
imageLoader.DisplayImage(数据获取(位置)、图像);
返回vi;
}
}
在适配器中,您正在使文本视图明确显示“项目1”、“项目2”等。您需要做的是将适配器构造函数添加到descriptionList中
public LazyAdapter(Activity a, ArrayList<String> guideList, ArrayList<String> descriptionList) {
当您的活动调用adapter.notifyDataSetChanged()时,将强制重新绘制列表中的每个项目。这将触发对适配器的getView()方法的调用。因此,您的逻辑属于getView()方法:
对guidelist和descriptionlist使用一个Hashmap,然后将其传递给lazyadapter构造函数。在getview()方法中使用hashmap的描述部分来设置文本。@user1933630
descriptionList.add(description.subString(1,description.length()-1);
在
onpostexute
中,您不需要runInUIThread
此方法始终在UI线程中运行。@Sunny好的,谢谢您告诉我。注:)谢谢。我已经解决了我的问题,但还有一个问题,当我执行“descriptionList.add(description);”时,当我尝试system.out.println时,它会打印带有括号的“[下载杂志]”,在我的列表视图中,它也会显示带有括号的内容。如何删除它们?这是从描述中删除[]。我没有50个代表在那里发表评论。这是一个新的答案。
text.setText(descriptionList.get(position));
descriptionList.add(description.subString(1,description.length()-1);