Intereting Posts

Android ListView, который не прокручивается?

Я пытаюсь сделать макет, что-то похожее на то, как рынок Android … где говорят по комментариям, есть то, что кажется ListView но оно не прокручивается (прокрутка всей страницы, но не комментарии). Я не уверен, что его даже ListView, но я хочу что-то похожее на представление списка (т. Е. Есть те разделительные панели, а что нет, но НЕ ПРОСМОТРЕТЬ). Есть люди, предлагающие использовать LinearLayout вместо ListView но я также хочу, чтобы элементы были интерактивными и открывали новое действие. Пожалуйста помоги?

Мое текущее дерево компоновки

 <LinearLayout> <ScrollView> <RelativeLayout> 

Я хочу разместить контент внутри RelativeLayout .

Solutions Collecting From Web of "Android ListView, который не прокручивается?"

Как объяснили программисты, которые сделали listView в этом видео с GoogleIo, никогда не ставьте ListView внутри прокрутки. Если ваш список не должен прокручиваться, используйте ViewGroup, как линейный макет, и добавьте все элементы в эту группу ViewGroup в цикле вашего кода. Если вы хотите, чтобы целая строка была нажата, вам нужно использовать другую ViewGroup в качестве корневого узла для каждой строки и добавить OnClickListener в этот вид.

Образец кода:

 LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); for (int current = 0; current < itemCount; current++) { View view = inflater.inflate(R.layout.layout_id, parent, false); //initialize the view view.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(getApplicationContext(), CLASS_TO_START) startActivity(intent); } }); viewGroup.addView(view); if (current < itemCount - 1) { inflater.inflate(R.layout.line, viewGroup); } } 

Этот код будет генерировать один вид для каждого элемента, который у вас есть, и поместить его в группу viewGroup. После каждого элемента, кроме последнего, он также добавит разделитель в группу viewGroup.

Я была такая же проблема. Я просто расширил LinearLayout по умолчанию с помощью метода setAdapter :

 public class LinearListView extends LinearLayout { Adapter adapter; Observer observer = new Observer(this); public LinearListView(Context context) { super(context); } public LinearListView(Context context, AttributeSet attrs) { super(context, attrs); } public LinearListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public void setAdapter(Adapter adapter) { if (this.adapter != null) this.adapter.unregisterDataSetObserver(observer); this.adapter = adapter; adapter.registerDataSetObserver(observer); observer.onChanged(); } private class Observer extends DataSetObserver { LinearListView context; public Observer(LinearListView context) { this.context = context; } @Override public void onChanged() { List<View> oldViews = new ArrayList<View>(context.getChildCount()); for (int i = 0; i < context.getChildCount(); i++) oldViews.add(context.getChildAt(i)); Iterator<View> iter = oldViews.iterator(); context.removeAllViews(); for (int i = 0; i < context.adapter.getCount(); i++) { View convertView = iter.hasNext() ? iter.next() : null; context.addView(context.adapter.getView(i, convertView, context)); } super.onChanged(); } @Override public void onInvalidated() { context.removeAllViews(); super.onInvalidated(); } } } 

Надеюсь это поможет!

У меня не хватает очков репутации для комментариев, но для тех, у кого есть только один элемент в решении Nappy, убедитесь, что в вашем файле макета указано следующее:

  android:orientation="vertical" 

Иначе появится, что добавляется только один элемент, но на самом деле они просто добавляются горизонтально … надеюсь, что это помогает кому-то.

Вы можете сделать один ListView и поместить все внутри него, так что вся страница будет прокручиваться. Вы можете реализовать свою собственную реализацию адаптера, но я рекомендую использовать отличный MergeAdapter от CommonsWare. Вы можете добавить метки или разделительные панели с помощью addView() и списков с addAdapter() . Ознакомьтесь с этой страницей для получения дополнительной информации об использовании и демонстрационном проекте.