`

android ScrollView嵌套ListView,并且实现动态添加ListView里的Item

阅读更多
package com.example.scroll;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import com.example.scroll.GridAdapter.ViewHolder;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;

public class MainActivity extends Activity {

ScrollView scroll;
String[] texts = new String[] { "无线", "通话设置", "声音", "显示", "位置", "应用", "账户",
"隐私权", "存储", "语言", "游戏", "娱乐", "电影", "音乐", "辅助功能", "日期" };
ImageView image;
TestListView list;
TestListView list2;
ImageView image2;
LinearLayout.LayoutParams lp;
private Button btnClick;
private List<HashMap<String, Object>> listValue = new ArrayList<HashMap<String, Object>>();
private int count = 0;
private GridAdapter adapter;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}

void init() {
list = (TestListView) findViewById(R.id.list);
list2 = (TestListView) findViewById(R.id.list2);
image = (ImageView) findViewById(R.id.image);
image2 = (ImageView) findViewById(R.id.image2);

btnClick = (Button) findViewById(R.id.btn_add);
btnClick.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {

HashMap<String, Object> map = new HashMap<String, Object>();
map.put("cai_liao", "材料"+count);
map.put("shu_liang", "数量"+count );
count++;
listValue.add(map);
adapter.notifyDataSetChanged();
}
});
adapter = new GridAdapter(this, listValue);
list.setAdapter(adapter);
list2.setAdapter(new SencondAdapter(this, texts));
scroll = (ScrollView) findViewById(R.id.scroll);
scroll.requestChildFocus(image, null);

}

public class GridAdapter extends BaseAdapter {

Activity context;
List<HashMap<String, Object>> mListValue;

public GridAdapter(Activity context, List<HashMap<String, Object>> listValue) {
this.context = context;
this.mListValue = listValue;
}

@Override
public int getCount() {
return mListValue.size();
}

@Override
public Object getItem(int position) {
return position;
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {

convertView = context.getLayoutInflater().inflate(
R.layout.item, null);
holder = new ViewHolder();
holder.btnDel = (Button) convertView
.findViewById(R.id.btn_del);
holder.tvCaiLiao = (TextView) convertView
.findViewById(R.id.tv_cai_liao);
holder.tvShuLiang = (TextView) convertView
.findViewById(R.id.tv_shu_liang);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
HashMap<String, Object> map = new HashMap<String, Object>();
map = mListValue.get(position);
String caiLiao = (String) map.get("cai_liao");
String shuLiang = (String) map.get("shu_liang");

holder.tvCaiLiao.setText(caiLiao + "步骤" + position);
holder.tvShuLiang.setText(shuLiang);

holder.btnDel.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
mListValue.remove(position);
adapter.notifyDataSetChanged();
}
});


return convertView;
}

class ViewHolder {
Button btnDel;
TextView tvCaiLiao, tvShuLiang;
}

}

}


package com.example.scroll;

import android.app.Activity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class SencondAdapter extends BaseAdapter {

Activity context;
String[] mTexts;

public SencondAdapter(Activity context, String[] texts) {
this.context = context;
this.mTexts = texts;
}

@Override
public int getCount() {
return mTexts.length;
}

@Override
public Object getItem(int position) {
return null;
}

@Override
public long getItemId(int position) {
return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {

convertView = context.getLayoutInflater().inflate(R.layout.sencond_item,
null);
holder = new ViewHolder();

holder.text = (TextView) convertView.findViewById(R.id.grid_text);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.text.setText(mTexts[position]);
return convertView;
}

class ViewHolder {
TextView text;
}

}



package com.example.scroll;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ListView;

public class TestListView extends ListView {
public TestListView(Context context) {
super(context);
}

public TestListView(Context context, AttributeSet attrs) {
super(context, attrs);
}

public TestListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);

super.onMeasure(widthMeasureSpec, expandSpec);
}
}



activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#FFFFFF"
    android:orientation="vertical" >

    <ScrollView
        android:id="@+id/scroll"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:fadingEdgeLength="0dp"
        android:scrollbars="none" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical" >

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                >

                <ImageView
                    android:id="@+id/image"
                    android:layout_width="fill_parent"
                    android:layout_height="150dp"
                    android:padding="2dp"
                    android:scaleType="centerCrop"
                    android:visibility="gone"
                    android:src="@drawable/ic_launcher" />

                <com.example.scroll.TestListView
                    android:id="@+id/list"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:fadingEdgeLength="0dp"
                    android:scrollbars="none" />
                <Button
                    android:id="@+id/btn_add"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:layout_marginTop="10dp"
                    android:text="添加"
                    />
            </LinearLayout>

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                 >

                <ImageView
                    android:id="@+id/image2"
                    android:layout_width="fill_parent"
                    android:layout_height="150dp"
                    android:padding="2dp"
                    android:scaleType="centerCrop"
                    android:src="@drawable/ic_launcher" />

                <com.example.scroll.TestListView
                    android:id="@+id/list2"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:fadingEdgeLength="0dp"
                    android:scrollbars="none" />
            </LinearLayout>
        </LinearLayout>
    </ScrollView>

</LinearLayout>

item.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <Button
        android:id="@+id/btn_del"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="删除"
         />

    <TextView
        android:id="@+id/tv_shu_liang"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true" />

    <TextView
        android:id="@+id/tv_cai_liao"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@id/tv_shu_liang"
        android:layout_toRightOf="@id/btn_del" />

</RelativeLayout>

sencond_item.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/grid_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"  />

</RelativeLayout>

效果图:

  • 大小: 129.9 KB
分享到:
评论

相关推荐

    解决Scrollview嵌套listview下拉刷新的一些问题

    ScrollView嵌套ListView可能导致性能下降,因为两者都会处理滑动事件,增加渲染负担。 **最佳实践**: 1. 避免在ScrollView中嵌套ListView,尽可能使用RecyclerView替代ListView,因为它更高效且支持多种滚动效果。...

    Android ScrollView嵌套ListView嵌套GridView的上下拉以及加载更多

    总的来说,Android开发中的ScrollView嵌套ListView和GridView是一项挑战,但通过巧妙地使用SwipeRefreshLayout、自定义适配器和滚动事件处理,我们可以构建出高效且功能丰富的用户界面。同时,不断优化性能和用户...

    ScrollView嵌套ListView刷新

    为了解决ScrollView嵌套ListView的刷新问题,有几种常见策略: 1. **使用NestedScrollView**:NestedScrollView是Android支持库提供的一种特殊类型的ScrollView,它支持嵌套滚动。这意味着它可以与另一个可以滚动的...

    解决ScrollView嵌套ListView Demo

    本文将详细介绍如何利用事件分发机制解决ScrollView嵌套ListView的问题,并通过提供的“demo”文件进行示例解析。 首先,我们需要理解滚动冲突的原因。当ScrollView作为ListView的父容器时,两个组件都具有滚动功能...

    Android scrollview嵌套listview

    总之,处理Android ScrollView嵌套ListView的冲突需要对Android的嵌套滚动机制有深入的理解。通过使用NestedScrollView、RecyclerView以及适当的配置和事件处理,可以创建流畅、响应式的用户界面,同时避免滚动冲突...

    ScrollView嵌套ListVIew两者之间滑动问题

    在Android开发中,ScrollView和ListView都是非常常见的视图组件。ScrollView是一个可以包含多个子视图,并允许用户滚动查看所有内容的容器。而ListView则用于显示大量的数据集,通常以垂直列表的形式展示,支持滚动...

    android scrollview嵌套listview

    当ScrollView嵌套ListView时,会涉及到一些特殊的处理和优化,因为这可能会导致性能问题和用户体验上的挑战。 首先,我们要明白为什么要在ScrollView中嵌套ListView。通常,这种布局设计可能是因为我们有一个大的...

    Android中自定义ListView,解决scrollview嵌套listview 滑动事件冲突

    1. **使用NestedScrollView替代ScrollView**:NestedScrollView是Android Support Library中的一个组件,它内置了对嵌套滑动的支持,能很好地处理嵌套在其中的ListView或RecyclerView的滑动事件。 2. **自定义...

    经典ScrollView嵌套ListView和ScrollView

    很多朋友因项目需求问题需要在ScrollView中嵌套使用ListView或ScrollView 但是彼此的滑动事件会发生冲突,网上大多数都是计算ListView的高度来解决这个问题,但个人亲手尝试 结果ListView的Item要是过多的话ListView...

    ScrollView嵌套listview或gridview

    当ScrollView中嵌套ListView或者GrideView时,listView和GrideView不能完全显示的时候

    解决scrollview嵌套listview的冲突问题

    用于解决scrollview组件嵌套listview组件时候 两者之间的冲突问题

    四种方法解决ScrollView嵌套Listview

    本篇文章将详细介绍四种解决ScrollView嵌套ListView问题的方法,帮助开发者更好地理解和应对这类场景。 **方法一:使用NestedScrollView替代ScrollView** NestedScrollView是Android Support Library中的一个组件...

    scrollview嵌套listview冲突解决

    ScrollView嵌套ListView的问题主要体现在以下几点: 1. **显示不全**:由于ScrollView会尝试将所有内容纳入其内部,而ListView的高度可能会被ScrollView压缩,导致ListView显示不完整,只有顶部部分可见。 2. **...

    解决scrollview嵌套listview显示不全的四种方法

    当ScrollView嵌套ListView时,可能会遇到显示不全的问题,即ListView的内容无法完全显示,只能看到一部分。这个问题主要是由于两个可滚动视图的冲突造成的。本文将详细探讨解决这一问题的四种方法。 ### 方法一:...

    android ScrollView嵌套demo

    在这个"android ScrollView嵌套demo"中,我们将深入探讨如何解决这个问题,并提供一个实际的解决方案。首先,我们需要理解ScrollView的工作原理。ScrollView内部会捕获触摸事件并处理滚动,如果其子视图中还有其他可...

    ScrollView嵌套ViewPager和ListView

    ScrollView嵌套ViewPager,ViewPager横向滑动时容易上下滚动处理;...ScrollView嵌套ListView,ListView滚动事件处理,可滚动; ScrollView子控件获取焦点后自动置顶问题处理。 ListView滚动到顶或到底事件监听。

    解决Android中ListView和ScrollView嵌套冲突

    解决ListView和ScrollView嵌套冲突的一种常见方法是避免直接在ScrollView内使用ListView。如果数据量不大,可以考虑改用LinearLayout或者NestedScrollView,它们可以更好地与ScrollView协同工作。但对于大数据集,...

    ScrollView嵌套Listview重新测量Listview高度

    在提供的`ListViewMeasureDemo`项目中,开发者可能已经实现了这些步骤,通过代码示例展示了如何解决ScrollView嵌套ListView时的高度计算问题。你可以通过查看该项目的代码,学习如何在实际开发中应用这种方法。 总...

    ScrollView,嵌套ListView,ListView并同时嵌套GridView

    但是,直接将ScrollView嵌套在ListView或者GridView中会带来问题,因为这可能导致滚动冲突。当ScrollView和ListView/GridView都尝试处理用户的滑动事件时,可能会导致滚动不顺畅或者无法正常滚动。为了解决这个问题...

Global site tag (gtag.js) - Google Analytics