java - 如何使 View 的一部分与 ListView 一起滚动?

标签 java android android-layout android-listview

我分别有两个微调器,它们帮助我选择要生成的 ListView 的选项和标准,即我需要选择一辆公共(public)汽车和一个车站来显示适合查询的时间表(ListView)。现在直接进入问题:我在 ScrollView 和 ListView 本身中有两个微调器。我需要确保当设备水平翻转时它会平滑滚动。我所能做的就是以固定高度滚动 ListView,虽然它可以填充并覆盖它的整个高度,但它缩小了......有什么想法吗?

公共(public)交通java代码:

public class PublicTransport extends Fragment {

    private View rootView;
    private Spinner routes_spinner, stops_spinner;
    private Button submit;
    private String spinner_stop_name;
    private int bus_id;
    private String table_names[] = { "Bus_2", "Bus_2B", "Bus_3", "Bus_4", "Bus_6", "Bus_6B", "Bus_9", "Bus_10", "Bus_11", "Bus_16", "Bus_16B" };
    private List<PublicTransportItem> items = new ArrayList<PublicTransportItem>();
    private List<String> uniqueStops = new ArrayList<String>();
    private CustomPublicTransportListAdapter adapter;
    private ListView listView;
    private static Locale myLocale;
    private Context context;
    private EasyTracker easyTracker = null;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        rootView = inflater.inflate(R.layout.publictransport, container, false);
        context = getActivity().getApplicationContext();
        easyTracker = EasyTracker.getInstance(context);
        setLanguage();
        routes_spinner = (Spinner) rootView.findViewById(R.id.routes_spinner);
        ArrayAdapter<CharSequence> routes_adapter = ArrayAdapter.createFromResource(getActivity(),
                R.array.routes_array, android.R.layout.simple_spinner_item);
        routes_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        routes_spinner.setAdapter(routes_adapter);
        stops_spinner = (Spinner) rootView.findViewById(R.id.stops_spinner);
        routes_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                bus_id = i;
                easyTracker.send(MapBuilder.createEvent("Public_transport",
                      "Rout", String.valueOf(i), null).build());//Routes i + 1
                PublicTransportDatabaseHandler ptdb = new PublicTransportDatabaseHandler(context);
                uniqueStops = ptdb.getAllStops(table_names[bus_id]);
                ArrayAdapter<String> stops_adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item,
                        uniqueStops);
                stops_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                stops_spinner.setAdapter(stops_adapter);
                items = ptdb.getAllPublicTransportItems(table_names[bus_id], spinner_stop_name);
                adapter = new CustomPublicTransportListAdapter (context, items, bus_id);
                listView = (ListView) rootView.findViewById(R.id.resultsList);
                listView.setAdapter(adapter);
                listView.setOnTouchListener(new View.OnTouchListener() {
                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                        int action = event.getAction();
                        switch (action) {
                            case MotionEvent.ACTION_DOWN:
                                v.getParent().requestDisallowInterceptTouchEvent(true);
                                break;

                            case MotionEvent.ACTION_UP:
                                v.getParent().requestDisallowInterceptTouchEvent(false);
                                break;
                        }

                        v.onTouchEvent(event);
                        return true;
                    }
                });
            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {

            }
        });
        stops_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                easyTracker.send(MapBuilder.createEvent("Public_transport",
                        "Stop", String.valueOf(i), null).build());//Stops i + 1
                spinner_stop_name = stops_spinner.getItemAtPosition(i).toString();
                PublicTransportDatabaseHandler ptdb = new PublicTransportDatabaseHandler(context);
                items = ptdb.getAllPublicTransportItems(table_names[bus_id], spinner_stop_name);
                adapter = new CustomPublicTransportListAdapter (context, items, bus_id);
                listView = (ListView) rootView.findViewById(R.id.resultsList);
                listView.setAdapter(adapter);
                listView.setOnTouchListener(new View.OnTouchListener() {
                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                        int action = event.getAction();
                        switch (action) {
                            case MotionEvent.ACTION_DOWN:
                                v.getParent().requestDisallowInterceptTouchEvent(true);
                                break;

                            case MotionEvent.ACTION_UP:
                                v.getParent().requestDisallowInterceptTouchEvent(false);
                                break;
                        }

                        v.onTouchEvent(event);
                        return true;
                    }
                });
            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {

            }
        });

        return rootView;
    }
    public static final PublicTransport newInstance(){
        PublicTransport publicTransport = new PublicTransport();
        Bundle bdl = new Bundle(2);
        publicTransport.setArguments(bdl);
        return publicTransport;
    }
    private void setLanguage() {
        SharedPreferences sp = this.getActivity().getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
        String lang = sp.getString("languages", "lt");
        myLocale = new Locale(lang);
        Resources res = getResources();
        DisplayMetrics dm = res.getDisplayMetrics();
        Configuration conf = res.getConfiguration();
        conf.locale = myLocale;
        res.updateConfiguration(conf, dm);
    }
}

公共(public)交通 xml 代码:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical">

        <LinearLayout
            android:layout_height="wrap_content"
            android:layout_width="fill_parent"
            android:orientation="horizontal"
            android:gravity="center_vertical"
            android:weightSum="1"
            android:layout_marginTop="10dp"
            android:background="@drawable/blue_rectangle">

            <TextView
                android:text="@string/bus_route"
                android:layout_height="wrap_content"
                android:layout_width="0dip"
                android:layout_weight="0.4"
                android:textSize="18sp"
                android:fontFamily="sans-serif-condensed"
                android:textColor="#ffffff" />

            <Spinner
                android:id="@+id/routes_spinner"
                android:layout_height="wrap_content"
                android:layout_width="0dip"
                android:layout_weight="0.6"
                android:entries="@array/routes_array"
                android:prompt="@string/route" />
        </LinearLayout>

        <View
            android:layout_width="fill_parent"
            android:layout_height="1dp"
            android:background="#ffffff" />

        <LinearLayout
            android:layout_height="wrap_content"
            android:layout_width="fill_parent"
            android:orientation="horizontal"
            android:gravity="center_vertical"
            android:weightSum="1"
            android:layout_marginBottom="10dp"
            android:background="@drawable/blue_rectangle">

            <TextView
                android:text="@string/bus_stop"
                android:layout_height="wrap_content"
                android:layout_width="0dip"
                android:layout_weight="0.4"
                android:textSize="18sp"
                android:fontFamily="sans-serif-condensed"
                android:textColor="#ffffff" />

            <Spinner
                android:id="@+id/stops_spinner"
                android:layout_height="wrap_content"
                android:layout_width="0dip"
                android:layout_weight="0.6"
                android:prompt="@string/stop" />

        </LinearLayout>

        <View
            android:layout_width="fill_parent"
            android:layout_height="1dp"
            android:background="#ffffff" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/results"
            android:padding="8dp"
            android:textSize="18dp"
            android:textStyle="normal"
            android:textColor="@android:color/white"
            android:fontFamily="sans-serif-condensed" />

        <View
            android:layout_width="fill_parent"
            android:layout_height="1dp"
            android:background="#ffffff" />

        <ListView
            android:id="@+id/resultsList"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:divider="@android:color/transparent"
            android:dividerHeight="5.0sp">

        </ListView>

    </LinearLayout>
</ScrollView>

enter image description here

最佳答案

不要在 ScrollView 中使用 ListView...相反,只需使用 ListView 并在 顶部添加标题 View ListView ... http://developer.android.com/reference/android/widget/ListView.html#addHeaderView(android.view.View)

编辑:

Here是我刚刚创建的示例。我希望它能有所帮助...

关于java - 如何使 View 的一部分与 ListView 一起滚动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28674542/

相关文章:

android - 无效的 Firebase 路径 : . com。 Firebase 路径不得包含 '.' 、 '#' 、 '$' 、 '[' 或 ']'

android - 如何在android中禁用webview的反弹效果(滚动到结束时的蓝色阴影)?

java - 如何使用 Apache HTTP 组件为每个路由配置 SSLSocket 工厂

java - 三星 Galaxy s3 上的旋转器问题

java - java中如何使用for循环和if语句将字符串中的每个字母加倍

java - MaterialDrawer 添加配置文件选项

java - 在java中将excel表解析为数据库 - 传递参数问题

java - 将值插入 sqlite - java

android - 构建类似 Play Music 的界面

android - 如何移动 editText 光标?