【问题标题】:Android - possibility to select List or GridAndroid - 可以选择列表或网格
【发布时间】:2015-03-27 18:43:31
【问题描述】:

正如我在标题中所写,我想研究一下你可以选择 ListView 或 GridView 的方式。 我用谷歌搜索了,但我没有找到足够的东西。

就我而言,我有一个用于 ListView 的自定义适配器,如果我还想实现一个 GridView,你会怎么做?

感谢任何资源,如果您知道教程!谢谢:)

【问题讨论】:

  • 我会将两者放在相同的布局中,交替显示
  • 谢谢桑吉特。 @Bkackbelt,怎么样?
  • 您不应该有两个具有不同可见性的布局。那只会弄乱你的代码并带来很多重复的逻辑。阅读我的答案以获得更好的方法。

标签: android listview gridview adapter


【解决方案1】:

要在没有大量重复逻辑的情况下实现这些不同的视图,您应该考虑使用 RecyclerView 并动态地将其 LayoutManager 更改为用户想要的。

【讨论】:

  • 你好,但我应该重写适配器?
  • 您应该编写一个带有 RecyclerView.Adapter 扩展的适配器,并通过为您的 RecyclerView 对象设置不同的 LayoutManager 对象来将此适配器用于两个视图。
  • 好的,如果我想要列表:LinearLayoutManager;同时,如果我想要网格:GridLayoutManager,对吗?通过 clickListener 实现这一点?
  • 就是这样。一个 XML 元素。一个适配器,但视图不同。
  • 一个activitymain.xml,一个用于CardView,一个用于ListView,对吧?
【解决方案2】:

我为 GridView 和 ListView 使用了相同的自定义适配器。 自定义适配器:

package com.example.nadiaakter.gridviewexample;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
public class CustomAdapter extends BaseAdapter {
    ImageView imageView;
    Context mContext;

    public CustomAdapter(Context mContext){
        this.mContext = mContext;
    }
    @Override
    public int getCount() {
        return images.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) {
        if (convertView == null){
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(8,8,8,8);
        }else {
            imageView = (ImageView) convertView;
        }
        imageView.setImageResource(images[position]);
        return imageView;
    }
    Integer[] images = {
            R.drawable.sample_2, R.drawable.sample_3,
            R.drawable.sample_4, R.drawable.sample_5,
            R.drawable.sample_6, R.drawable.sample_7,
            R.drawable.sample_0, R.drawable.sample_1,
            R.drawable.sample_2, R.drawable.sample_3,
            R.drawable.sample_4, R.drawable.sample_5,
            R.drawable.sample_6, R.drawable.sample_7,
            R.drawable.sample_0, R.drawable.sample_1,
            R.drawable.sample_2, R.drawable.sample_3,
            R.drawable.sample_4, R.drawable.sample_5,
            R.drawable.sample_6, R.drawable.sample_7
    };
}

activity_main.xml

android:id="@+id/gvImage"
android:columnWidth="90dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="auto_fit"
android:fadingEdge="horizontal"
android:padding="10dp"

/>

MainActivity.java

package com.example.nadiaakter.gridviewexample;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.widget.GridView;


public class MainActivity extends ActionBarActivity {
    GridView gridView;
    CustomAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        gridView = (GridView) findViewById(R.id.gvImage);
        adapter = new CustomAdapter(this);
        gridView.setAdapter(adapter);

    }   

}

注意:这是 GridView 示例。 ListView 示例(相同的 CustomAdapter )如下:

xml

<ListView  xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/lvImage"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fadingEdge="horizontal"
android:padding="10dp"
    />

又是 MainActivity.java

package com.example.nadiaakter.gridviewexample;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.widget.ListView;


public class MainActivity extends ActionBarActivity {
    ListView listView;
    CustomAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView = (ListView) findViewById(R.id.lvImage);
        adapter = new CustomAdapter(this);
        listView.setAdapter(adapter);

    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    • 2021-01-25
    • 2017-10-29
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    相关资源
    最近更新 更多