其他分享
首页 > 其他分享> > android-根据行创建具有不同类型的适配器的视图

android-根据行创建具有不同类型的适配器的视图

作者:互联网

我正在尝试复制此Google即时贴界面.我并不担心卡片的感觉,但我更担心视图的构建方式.

我正在考虑使用一个适配器,该适配器返回与该行相对应的不同布局.但是正如您所看到的,两个视图都包含彼此不相关的信息.

是否可以使用具有不同行适配器的ListView?

或者如何使用自定义视图来实现这一目标?

解决方法:

首先,您需要为此创建一个CustomAdapter:

public class CustomAdapter extends BaseAdapter {
    ArrayList<View> views;
    Context context;

    public CustomAdapter(Context context, ArrayList<View> views){
        this.views = views;
        this.context = context;
    }

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

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

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

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        View rowView = views.get(i);
        /*set the views of the rowView here but take note use try catch since you can't be sure if the view will be present or not this is the part where I do not advice it to have different custom views per row but it's all yours to do your tricks*/

        return rowView;
    }
}

要使用它,这是我在create上的示例方法:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test);

        ArrayList<View> views = new ArrayList<View>();

        CustomAdapter adapter = new CustomAdapter(MainActivity.this,views);
        ListView custom_list = (ListView)findViewById(R.id.list_custom);
        custom_list.setAdapter(adapter);

        LayoutInflater inflater = (LayoutInflater)   getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view1 = inflater.inflate(R.layout.view1, null);
        View view2 = inflater.inflate(R.layout.view2, null);

        views.add(view1);
        views.add(view2);
        adapter.notifyDataSetChanged();
}

如果有需要,请执行解决方法,但基本上就是这样.膨胀视图,将其传递到arrayList上,然后在listView上进行设置.

标签:android-listview,android-custom-view,android
来源: https://codeday.me/bug/20191122/2059046.html