Android 无法设置listview文本

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

我正在使用json解析器将图像url和描述传递到我的listview中。现在我设法加载了图像,但是如何更改列表视图的文本?目前它只显示项目0、项目1等。。如何将描述传递到lazyadapter

主要活动:

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);