Пользовательский расширяемый список для Android без макета xml

Я следую приведенному ниже коду, чтобы создать expandablistView в android с нашим макетом xml. Он работает нормально, но я не знаю, как я могу изменить изображение. Если я использую изображение в дочернем/групповом макете? Я уже сделал код для добавления ImageView в дочерние/групповые представления, но как я могу обновить/изменить изображение, опубликованное с помощью ImageView в дочернем/групповом представлении. . Заранее спасибо за руководство

открытый класс GundamExpAdapter extends BaseExpandableListAdapter { /------------ Поля -------------- -------------/

private final HashMap<String, ArrayList<String>> myData = new HashMap<String, ArrayList<String>>();
private final HashMap<Integer, String> lookUp = new HashMap<Integer, String>();
private final Context context;



/*-------------------------- Public --------------------------*/

public GundamExpAdapter(final Context con)
{
    context = con;
}

public boolean AddGroup(final String groupName, final ArrayList<String> list)
{
    final ArrayList<String> prev = myData.put(groupName, list);

    if (prev != null)
        return false;

    lookUp.put(myData.size() - 1, groupName);

    notifyDataSetChanged();
    return true;
}

@Override
public Object getChild(int groupPos, int childPos) 
{
    if (lookUp.containsKey(groupPos))
    {
        final String str = lookUp.get(groupPos);
        final ArrayList<String> data = myData.get(str);

        return data.get(childPos);
    }

    return null;
}

@Override
public long getChildId(int groupPos, int childPos) 
{  
    return 0;
}

@Override
public View getChildView(int groupPos, int childPos, boolean isLastChild, 
                         View convertView, ViewGroup parent) 
{
    LinearLayout linear = new LinearLayout(context);

    final LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);

    TextView text = new TextView(context);

    // Indent
    final String str = "\t\t\t" + (String)getChild(groupPos, childPos);

    linear = new LinearLayout(context);
    linear.setOrientation(LinearLayout.VERTICAL);

    text.setLayoutParams(params);
    text.setText(str);
    linear.addView(text);

    return linear;
}

@Override
public int getChildrenCount(int groupPos) 
{
    if (lookUp.containsKey(groupPos))
        return myData.get(lookUp.get(groupPos)).size();

    return 0;
}

@Override
public Object getGroup(int groupPos) 
{
    if (lookUp.containsKey(groupPos))
        return myData.get(lookUp.get(groupPos));

    return null;
}

@Override
public int getGroupCount() 
{
    return myData.size();
}

@Override
public long getGroupId(int groupPos) 
{
    return 0;
}

@Override
public View getGroupView(int groupPos, boolean isExpanded, View convertView, ViewGroup parent) 
{
    LinearLayout linear = new LinearLayout(context);

    final LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);

    TextView text = new TextView(context);

    // Push the group name slightly to the right for drop down icon
    final String str = "\t\t" + lookUp.get(groupPos);

    linear = new LinearLayout(context);
    linear.setOrientation(LinearLayout.VERTICAL);

    text.setLayoutParams(params);
    text.setText(str);
    text.setTextSize(18.0f);
    linear.addView(text);

    return linear;
}

@Override
public boolean hasStableIds() 
{
    return false;
}

@Override
public boolean isChildSelectable(int groupPos, int childPos) 
{
    return false;
}

} И его активность, как показано ниже

public class Main extends ExpandableListActivity
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.main);

        GundamExpAdapter gea = new GundamExpAdapter(this);

        ArrayList<String> models = new ArrayList<String>();
        models.add("NZ 666 Kshatriya");
        models.add("Unicorn");
        models.add("Sinanju");
        gea.AddGroup("Unicorn", models);

        models = new ArrayList<String>();
        models.add("DeathScythe");
        models.add("Altron");
        models.add("HeavyArms");
        models.add("SandRock");
        models.add("Epyon");
        models.add("ZERO");
        gea.AddGroup("Wing", models);

        setListAdapter(gea);
        ExpandableListView elv = getExpandableListView();
        elv.setTextFilterEnabled(true);
        //listview.setOnItemClickListener(OnClickingListItem());
    }
}

person aftab    schedule 06.06.2011    source источник


Ответы (1)


Сначала вам нужно будет изменить свои данные, чтобы узнать, в какой строке будет другое изображение. Затем вы можете вызвать BaseExpandableListAdapter.notifyDataSetChanged(), что приведет к повторному вызову getChildView для каждой строки. Затем вы сможете setBackgroundDrawable() в каждом представлении изображения изменить изображение.

person darune    schedule 06.06.2011
comment
Уважаемый darune, если я использую ImageView imgPicture = new ImageView(context); и imgPicture.setBackgroundResource(R.drawable.add_picture); в моем методе getChildView(...), как вы видите, мой адаптер GundamExpAdapter расширяет BaseExpandableListAdapter , не могли бы вы подробно описать, где мне нужно поместить метод notifyDataSetChanged() ? Спасибо за быстрый ответ.... - person aftab; 06.06.2011