onListItemClick не (всегда) вызывается с ListActivity - PullRequest
0 голосов
/ 20 августа 2011

Я использовал ListActivity для отображения представления, накачанного из файла макета xml.Когда я первоначально отображаю это представление в списке, я скрываю часть представления, устанавливая свойство visible целевого представления в View.GONE.В методе onListItemClick я установил видимость этого «скрытого» представления на View.GONE, если он виден.При следующем нажатии я хочу снова скрыть вид.Для этого я определяю видимость представления и изменяю его на View.GONE, если это View.VISIBLE.

Мой код выполняет метод onListItemClick, когда видимость скрытого представления отображается в View.GONE и правильно отображаетскрытый вид на клик.Однако он не выполняет метод onListItemClick, когда видимость представления установлена ​​на View.VISIBLE.

Я понимаю, что эта ситуация является хорошим кандидатом для использования ExpandableListActivity, но я не могу его использоватьиз-за другой неразрешимой проблемы!

Вот (частично соответствующий) код:

public class MyListActivity extends ListActivity implements OnClickListener {
// images that depict whether part of the view is visible or not
private Drawable imgUp, imgDown;

    private class MyOrderAdapter extends ArrayAdapter<Order> {

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;
            if (v == null) {
        LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        // infalte this view from xml
        v = vi.inflate(R.layout.brief_order, null);

        // display down arrow key depicting that more is available to be
        // displayed when a user clicks on it.
        ImageView arrow = (ImageView) v.findViewById(R.id.imgArrow);

        // get a reference to the table layout for details
        // which should not be displayed initially
        TableLayout tb = (TableLayout) v.findViewById(R.id.view_detail);

        // DO NOT DISPLAY PART OF THE VIEW INITIALLY    
        tb.setVisibility(View.GONE);
    }

    // code to initialize the text filed values in the view v
    return v;
    }


    // onListItemClick
    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);

        Log.d("MyList", "item click called");

        // RETRIEVE THE detail view
        TableLayout tb = (TableLayout) v.findViewById(R.id.view_detail);
    if(tb.getVisibility() == View.GONE) { 
        tb.setVisibility(View.VISIBLE);
        img.setImageDrawable(imgUp);
    }
    else {
        img.setImageDrawable(imgDown);
        tb.setVisibility(View.GONE);
    }
}

// rest of the code
}

Спасибо.

ура

1 Ответ

0 голосов
/ 17 января 2012

Но на всякий случай вы должны установить изображения и другие элементы внутри вашего ListView как не focusable, и будет вызван метод onListItemClick.

...