我需要在LinearLayout内部放置几个listview。 Listviews应该是包装内容以使listview适应他们的项目。我需要一个滚动条,我可以滚动所有列表视图。我知道我不能使用scrollview,因为listviews有自己的滚动(但我不需要listviews的滚动,因为我有它们在wrap-content中)。我想也许把列表视图放在LinearLayout中我会对scrollview没有问题,但它没有用,LinearLayout固定在屏幕上,滚动视图没有出现,listviews结束了可滚动。没有scrollview如果我有包含内容的列表,他们正确显示,但我没有任何滚动,我无法在屏幕下方看到lisviews。真的我有这个错误一个月,我没有找到任何解决方案,我绝望:(
我的代码:
XML
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/detail_info_on_top"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#FF003150"
android:orientation="vertical">
<!--<ScrollView android:layout_width="fill_parent"-->
<!-- android:layout_height="fill_parent"-->
<!-- android:fillViewport="true">-->
<LinearLayout
android:id="@+id/layout"
android:scrollbars="vertical"
android:scrollbarAlwaysDrawVerticalTrack="true"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</LinearLayout>
<!--</ScrollView>-->
JAVA
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
...
LinearLayout layout = (LinearLayout)findViewById(R.id.layout);
ArrayList<SectionHolder> shs = SObjectDB.SOBJECTS.get(sobject).detail;
for(SectionHolder sh : shs) {
/** layout by each section */
ListView lsvDetails = new ListView(this);
lsvDetails.setPadding(0, 0, 0, 0);
lsvDetails.setBackgroundColor(0xFFFFFFFF);
lsvDetails.setCacheColorHint(Color.TRANSPARENT);
lsvDetails.setFocusable(false);
lsvDetails.setSelected(false);
lsvDetails.setScrollContainer(false);
lsvDetails.setVerticalScrollBarEnabled(false);
LinearLayout ll = new LinearLayout(this);
LinearLayout.LayoutParams llp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
ll.setLayoutParams(llp);
ll.setOrientation(LinearLayout.VERTICAL);
ll.setFocusable(false);
/** setting section header */
TextView sv = new TextView(this);
sv.setText(sh.name);
sv.setTextSize(15);
sv.setTextColor(0xFFFFFFFF);
sv.setBackgroundColor(0xFF656565);
sv.setWidth(480);
//sv.setTypeface(null, Typeface.BOLD);
ll.addView(sv);
...
LinkedHashMap<String,String> hm;
final ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
hm = new LinkedHashMap<String, String>();
for(FieldHolder fs : fhs) {
hm = new LinkedHashMap<String, String>();
...
hm.put("data", v1);
mylist.add(hm);
}
ListView.LayoutParams lsvp = new ListView.LayoutParams(ListView.LayoutParams.FILL_PARENT, ListView.LayoutParams.WRAP_CONTENT);
lsvDetails.setLayoutParams(lsvp);
lsvDetails.setScrollbarFadingEnabled(false);
lsvDetails.setScrollingCacheEnabled(false);
lsvDetails.setSelector(R.drawable.multi_white_color);
lsvDetails.setDrawSelectorOnTop(false);
lsvDetails.setAdapter(new DetailAdapter(this, mylist, R.layout.grid_detail, new String[]{"label", "data"}, new int[]{R.id.lblName, R.id.lblData}));
ll.addView(lsvDetails);
layout.setVerticalScrollBarEnabled(true);
layout.setScrollbarFadingEnabled(true);
layout.setScrollBarStyle(50331648);
layout.setScrollContainer(true);
layout.setFocusable(true);
layout.setFocusableInTouchMode(true);
layout.addView(ll);
}
}
你如何看到我创造了lisviews dinamically,我把布局与secttion标题放在一起。如果您有疑问,请问我需要尽快找到解决方案。
答案 0 :(得分:0)
我需要一个滚动条,我可以滚动所有列表视图。
这是不可能的,抱歉。
我有多个列表视图,具体取决于数据库,然后我将它们放在linearLayout
中
不要那样做。创建一个ListView
。将数据库结果合并到一个适配器中,并将该适配器放在ListView
中。也许我的MergeAdapter
可以提供帮助。
答案 1 :(得分:0)
我试图实现你的目标但失败了,我没有太多时间浪费,但这是我的尝试代码:
package your.packag;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class TestScrollingActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final ListView lv1 = (ListView) findViewById(R.id.listView1);
final ListView lv2 = (ListView) findViewById(R.id.listView2);
final ListView lv3 = (ListView) findViewById(R.id.listView3);
final ListView lv4 = (ListView) findViewById(R.id.listView4);
final ListView lv5 = (ListView) findViewById(R.id.listView5);
BaseAdapter ba = new BaseAdapter() {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView tv = new TextView(parent.getContext());
tv.setText(String.valueOf(position));
return tv;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return 100;
}
};
lv1.setAdapter(ba);
lv2.setAdapter(ba);
lv3.setAdapter(ba);
lv4.setAdapter(ba);
lv5.setAdapter(ba);
OnScrollListener onScrollListener = new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState == SCROLL_STATE_IDLE) {
int top = view.getHeight()/view.getAdapter().getCount()*view.getFirstVisiblePosition();
if (lv1 != view) {
lv1.scrollTo(0, top);
}
if (lv2 != view) {
lv2.scrollTo(0, top);
}
if (lv3 != view) {
lv3.scrollTo(0, top);
}
if (lv4 != view) {
lv4.scrollTo(0, top);
}
if (lv5 != view) {
lv5.scrollTo(0, top);
}
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
}
};
lv1.setOnScrollListener(onScrollListener);
lv2.setOnScrollListener(onScrollListener);
lv3.setOnScrollListener(onScrollListener);
lv4.setOnScrollListener(onScrollListener);
lv5.setOnScrollListener(onScrollListener);
}
}
<ListView
android:id="@+id/listView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" >
<!-- Preview: listitem=@android:layout/simple_list_item_1 -->
</ListView>
<ListView
android:id="@+id/listView2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" >
</ListView>
<ListView
android:id="@+id/listView3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" >
</ListView>
<ListView
android:id="@+id/listView4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" >
</ListView>
<ListView
android:id="@+id/listView5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" >
</ListView>
滚动以一种奇怪的方式失败,请务必尝试一下,如果你修好它就告诉我。
P.S。这非常接近于让它发挥作用。