Как обновить изображение в моем списке просмотра - PullRequest
0 голосов
/ 26 августа 2011

Я делаю просмотр списка, который содержит пользовательский макет.Внутри пользовательского макета находится изображение.Когда я использую слушатель Listview lv.setonclick, он предоставляет мне переменную View, которую я могу использовать для управления рисованием таким образом.lv.setOnItemClickListener (new OnItemClickListener () {

            @Override
            public void onItemClick(AdapterView<?> arg0, View listview,
                    int position, long arg3) {
                ImageView pincolor = (ImageView) listview
                        .findViewById(R.id.ivimtrackingpin);
           pincolor.setImageResource(R.drawable.pinred);

Однако, когда я хочу создать другую функцию, у меня нет этой переменной ViewView. Как получить ее, чтобы я мог делать то же самое простоза пределами onclicklistener? Спасибо

РЕДАКТИРОВАТЬ вот мой список и адаптер

SpecialAdapter adapter = new SpecialAdapter(this, list,
                    R.layout.imtracking_row_text, new String[] { "name",
                            "location" }, new int[] { R.id.tvImtrackingName,
                            R.id.tvImtrackingLocation });
HashMap<String, String> temp = new HashMap<String, String>();
                JSONObject user = tracking_users.getJSONObject(i);
                temp.put("name", user.getString("full_name"));
                // upload location time
                temp.put("location", user.getString("last_updated_at"));
                list.add(temp);
lv.setAdapter(adapter);

public class SpecialAdapter extends SimpleAdapter {
    private int[] colors = new int[]{R.drawable.row_background_grey, R.drawable.row_background_white};

    public SpecialAdapter(Context context,
            ArrayList<HashMap<String, String>> list, int resource,
            String[] from, int[] to) {
        super(context, list, resource, from, to);

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = super.getView(position, convertView, parent);
        int colorPos = position % colors.length;
        view.setBackgroundResource(colors[colorPos]);
        return view;
    }
}

Ответы [ 3 ]

2 голосов
/ 26 августа 2011

Объявите один вид глобально и назначьте вид списка этому виду, и вы можете использовать его где угодно.

0 голосов
/ 26 августа 2011

Вы можете найти свой ImageView таким образом:

private ImageView getImageViewAtPosition(ListView listView, int pos) {
    final View      line  = listView.getChildAt(pos); 
    final ImageView image = (ImageView) line.findViewById(R.id.the_id_of_your_image_in_the_xml_layout_of_the_line);

    return image;
}

И если вам нужно узнать, сколько записей в списке:

private int getCount(ListView listView) {
    return listView.getChildCount();
}

Подробнее здесь .

0 голосов
/ 26 августа 2011

Возможно, вы захотите написать свой собственный подкласс BaseAdapter или расширить любую используемую реализацию ListAdapter и переопределить getView (). Там вы можете надуть строку ListView и сделать все необходимое для ImageView.

...