0

jsonパーサーを使用して、画像のURLと説明をリストビューに渡します。今、私は画像をロードすることができましたが、リストビューのテキストを変更するにはどうすればよいですか?現在、アイテム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();
                }
            });


        }

    }


    } 

イメージアダプタ:

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;
    }
}
4

4 に答える 4

1

アダプターでは、TextView に「アイテム 1」、「アイテム 2」などを具体的に表示させています。あなたがする必要があるのは、アダプターコンストラクターに descriptionList を追加することです

public LazyAdapter(Activity a, ArrayList<String> guideList, ArrayList<String> descriptionList) {

そして、する

text.setText(descriptionList.get(position));
于 2013-01-07T04:45:04.860 に答える
0

@ user1933630

 descriptionList.add(description.subString(1,description.length()-1);
于 2013-01-07T05:01:19.210 に答える
0

アクティビティが adapter.notifyDataSetChanged() を呼び出すと、リスト内のすべてのアイテムが強制的に再描画されます。これにより、アダプターの getView() メソッドへの呼び出しがトリガーされます。したがって、ロジックは getView() メソッドに属します。

text.setText(descriptionList.get(position));
于 2013-01-07T04:46:56.513 に答える
0

guidelist と descriptionlist に単一の Hashmap を使用し、それを lazyadapter コンストラクターに渡します。getview() メソッドでハッシュマップの説明部分を使用して、テキストを設定します。

于 2013-01-07T04:47:17.653 に答える