>

목록보기에 표시되는 정적 데이터가있는 로컬 json이 있습니다.

각 객체는 목록보기에도 표시되는 이미지/로고를 가져야합니다. 이미지는 로컬 및 드로어 블 폴더에 있습니다.

데이터 /리스트 뷰는 http://wptrafficanalyzer.in/blog/android-itemclicklistener-for-a-listview-with-images-and-text/

이 튜토리얼에서는 모든 데이터와 이미지가 배열로 저장됩니다. 내 데이터는 JSON에 저장됩니다.

JSON에서 이미지 또는 이미지 이름을 어떻게 "참조"하고 목록보기를 만들 때 실제로 이미지에 액세스합니까?

  • 답변 # 1

    drawable 에 이미지가 있다고 상상해 봅시다  폴더 :

    drawable
        image_name_1
        image_name_2
        image_name_3
        image_name_4
        ...
    
    

    이미지 이름을 json에 입력하십시오 :

    [
        {
            "some_field_1": "some_value_1",
            "some_field_2": "some_value_2",
            "some_field_3": "some_value_3",
            ...
            "image_name": "image_name_1"
        },
        {
            "some_field_1": "some_value_1",
            "some_field_2": "some_value_2",
            "some_field_3": "some_value_3",
            ...
            "image_name": "image_name_2"
        },
        {
            "some_field_1": "some_value_1",
            "some_field_2": "some_value_2",
            "some_field_3": "some_value_3",
            ...
            "image_name": "image_name_3"
        },
        ...
    ]
    
    

    JSON에서 이름을 얻고 drawab 리소스를로드합니다.

       JSONArray data; // your JSON
        Context context; // context
        Resources resources = context.getResources();
        for (int i = 0; i < data.length(); i++) {
            // getting some another JSON field
            // get image name from JSON
            String imageName = data.getJSONObject(i).getString("image_name");
            // get resource id by image name
            final int resourceId = resources.getIdentifier(imageName, "drawable", context.getPackageName());
            // get drawable by resource id
            Drawable drawable = resources.getDrawable(resourceId);
            // get bitmap by resource id
            Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), resourceId);
        }
    
    

    업데이트

    이미지 리소스 ID를 HashMap에 넣기

       ...
        List<HashMap<String,String>> aList = new ArrayList<HashMap<String,String>>();
        JSONArray data; // your JSON
        Context context; // context
        Resources resources = context.getResources();
        for (int i = 0; i < data.length(); i++) {
            HashMap<String, String> hm = new HashMap<String,String>();
            hm.put("txt", "Country : " + countries[i]);
            hm.put("cur","Currency : " + currency[i]);
            // get image name from JSON
            String imageName = data.getJSONObject(i).getString("image_name");
            // get resource id by image name
            final int resourceId = resources.getIdentifier(imageName, "drawable", context.getPackageName());
            hm.put("flag", Integer.toString(resourceId) );
            aList.add(hm);
        }
    
    

  • 답변 # 2

    // 모델 클래스가 있다면이 코드가 도움이됩니다

    try {
            JSONObject jsonObject = new JSONObject(loadJSONFromAsset());
            JSONArray array = jsonObject.getJSONArray("Details");
            Resources resources = this.getResources();
            for (int i=0;i<array.length();i++){
                // Parse the JSON
                JSONObject jo_inside = array.getJSONObject(i);
                String title = jo_inside.getString("title");
                String img = jo_inside.getString("img");
                // get resource id by image name
                final int resourceId = resources.getIdentifier(img, "drawable", this.getPackageName());
                //load Model Class
                Model_Home data = new Model_Home(title,resourceId);
                indexList.add(data);
    
            }
        }catch (JSONException e){
            e.printStackTrace();
        }
    
    

관련 자료

  • 이전 LIKE의 SQL 밑줄
  • 다음 c++ - 내림차순으로 배열을 오름차순으로 인쇄