如何使GridView的单元格可滚动?

如何使GridView的单元格可滚动?,gridview,android,Gridview,Android,我正在开发一个Android应用程序,我使用一个浏览器来显示文本。 一些文本条目可能很大,因此,我想使gridview的单元格可滚动。 我知道如何使文本视图可滚动,您只需设置 android:scrollbars = "vertical" 属性,并使用 yourTextView.setMovementMethod(new ScrollingMovementMethod()); 在你的代码中 GridView每个单元格的xml文件如下所示: <RelativeLayout xml

我正在开发一个Android应用程序,我使用一个浏览器来显示文本。 一些文本条目可能很大,因此,我想使gridview的单元格可滚动。

我知道如何使文本视图可滚动,您只需设置

android:scrollbars = "vertical"
属性,并使用

yourTextView.setMovementMethod(new ScrollingMovementMethod());
在你的代码中

GridView每个单元格的xml文件如下所示:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/grid_cell_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:gravity="center_vertical|center_horizontal"
        android:text="TextView"
        android:scrollbars = "vertical"/>

</RelativeLayout> 
因此,我认为所需要的只是在GridView单元格的xml文件中为TextView设置与上面相同的属性,并在适配器的getView()内使用setMovementMethod(),但它不起作用

有什么想法吗

非常感谢

编辑:

以下是适配器的完整代码:

public class CustomAdapter extends BaseAdapter {
    private LayoutInflater layoutinflater;
    private List<String> listStorage;
    private Context context;
    String msg = "drag";
    Resources r;

    public CustomAdapter(Context context, List<String> customizedListView, Resources r) {
        this.context = context;
        layoutinflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        listStorage = customizedListView;
        this.r = r;
    }

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

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final String a = listStorage.get(position);
        // view holder pattern
        if (convertView == null) {
            final LayoutInflater layoutInflater = LayoutInflater.from(context);
            convertView = layoutInflater.inflate(R.layout.grid_cell, null);

            final TextView text = (TextView) convertView.findViewById(R.id.grid_cell_text);

            final ViewHolder viewHolder = new ViewHolder(text);
            convertView.setTag(viewHolder);
        }

        final ViewHolder viewHolder = (ViewHolder)convertView.getTag();
        viewHolder.text.setText(a);
        viewHolder.text.setLayoutParams(new RelativeLayout.LayoutParams(GridView.AUTO_FIT, dp_to_px(40)));
        return convertView;
    }

    // Your "view holder" that holds references to each subview
    private class ViewHolder {
        private final TextView text;

        public ViewHolder(TextView text) {
            this.text = text;
        }
    }

    public int dp_to_px(int dp){
        int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, r.getDisplayMetrics());
        return px;
    }
}
公共类CustomAdapter扩展了BaseAdapter{
私人停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场;
私有列表存储;
私人语境;
字符串msg=“拖动”;
资源r;
公共CustomAdapter(上下文上下文、列表customizedListView、资源r){
this.context=上下文;
layoutinflater=(layoutinflater)context.getSystemService(context.LAYOUT\u INFLATER\u SERVICE);
listStorage=customizedListView;
这个。r=r;
}
@凌驾
public int getCount(){
返回listStorage.size();
}
@凌驾
公共对象getItem(int位置){
返回位置;
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
最终字符串a=listStorage.get(位置);
//视图保持器模式
if(convertView==null){
final LayoutInflater LayoutInflater=LayoutInflater.from(上下文);
convertView=LayoutFlater.充气(R.layout.grid_单元格,空);
final TextView text=(TextView)convertView.findViewById(R.id.grid\u cell\u text);
最终视窗夹持器视窗夹持器=新视窗夹持器(文本);
convertView.setTag(viewHolder);
}
final ViewHolder ViewHolder=(ViewHolder)convertView.getTag();
viewHolder.text.setText(a);
viewHolder.text.setLayoutParams(新的RelativeLayout.LayoutParams(GridView.AUTO_FIT,dp_to_px(40));
返回视图;
}
//保存对每个子视图的引用的“视图持有者”
私有类视窗持有者{
私有最终文本查看文本;
公共视图持有者(文本视图文本){
this.text=文本;
}
}
公共内部dp_至px(内部dp){
int px=(int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,dp,r.getDisplayMetrics());
返回px;
}
}
以及GridView的ClickListener的代码:

grid.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

                Log.d(msg, "Click!");

            }
        });
grid.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
Log.d(消息“点击!”);
}
});

将您的单元格更改为

<ScrollView
    android:id="@+id/scrollView"
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
        <TextView
            android:id="@+id/grid_cell_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:gravity="center_vertical|center_horizontal"
            android:text="TextView"
            android:scrollbars = "vertical"/>
    </RelativeLayout> 
</ScrollView>

为什么不在单元格中使用ScrollView?我尝试过,但现在GridView的ItemClickListener没有被调用。您的滚动问题解决了吗?我可以看看你的gridViewAdapter的全部代码吗?还有ClickListenerNo ti没有:(我提供了您在我的问题中要求编辑的代码。@NikosKardoulakis我已经开始工作了,我将更新我的答案
<ScrollView
    android:id="@+id/scrollView"
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
        <TextView
            android:id="@+id/grid_cell_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:gravity="center_vertical|center_horizontal"
            android:text="TextView"
            android:scrollbars = "vertical"/>
    </RelativeLayout> 
</ScrollView>
@Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        final String a = listStorage.get(position);
        // view holder pattern
        if (convertView == null) {
            final LayoutInflater layoutInflater = LayoutInflater.from(context);
            convertView = layoutInflater.inflate(R.layout.grid_cell, null);

            final TextView text = (TextView) convertView.findViewById(R.id.grid_cell_text);
            ScrollView scrollView = (ScrollView) convertView.findViewById(R.id.scrollView);

            final ViewHolder viewHolder = new ViewHolder(text, scrollView);
            convertView.setTag(viewHolder);
        }

        final ViewHolder viewHolder = (ViewHolder)convertView.getTag();
        viewHolder.text.setText(a);
        viewHolder.scrollView.setLayoutParams(new GridView.LayoutParams(GridView.AUTO_FIT, dp_to_px(60)));
        viewHolder.text.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d("CLICKITEM", String.valueOf(position));
            }
        });
        return convertView;
    }

    // Your "view holder" that holds references to each subview
    private class ViewHolder {
        private final TextView text;
        private final ScrollView scrollView;

        public ViewHolder(TextView text,ScrollView scrollView) {
            this.text = text;
            this.scrollView = scrollView;
        }
    }