我是否将过多代码放入我的customadapter for listview?

时间:2017-03-21 20:28:13

标签: android listview custom-adapter concept

我认为我的CustomAdapter中有太多代码用于我的listview。在CustomAdapter中有多个onclicks,db编辑和弹出窗口代码是否正常?

我已经研究过如何将代码移动到包含listview的活动类中,但它要么不可能,要么非常复杂。我没有太多的经验,因此很难遵循一些更技术性的编码方法。

1 个答案:

答案 0 :(得分:0)

  

我已经研究了如何将代码移动到包含listview的活动类中,但它不可能或非常复杂

复杂的唯一原因是你在适配器中做得太多了。

如果您确实想将代码移动到活动中,那么使用接口

的方式

例如,在适配器中有一些给定的Item类。

// ... BaseAdapter, ArrayAdapter, RecyclerView.Adapter... Same difference
public class YourAdapter extends BaseAdapter {

    public interface OnItemActionListener {
        void onItemEdited(Item x);
        void onItemAdded(Item x);
        void onItemClicked(Item x);
        // etc.
    }

    public OnItemActionListener listener; // should make private with a setter method

    ...

        // somewhere in the adapter
        Item x = getItem(position);

        if (listener != null) {
            listener.onItemClicked(item);
        }

    ...

}

您的Activity可以实现该接口。

public YourActivity extends Activity 
    implements YourAdapter.OnItemActionListener {

    @Override
    public void onItemClicked(Item x) {
        Log.d("item click", String.valueOf(x));
    }

    @Override
    public void onItemAdded(Item x) {
        Log.d("item added", String.valueOf(x));
    }

    @Override
    protected void onCreate(Bundle b){
        super.onCreate(b);
        setContentView... ;

        adapter = new YourAdapter... ;
        adapter.listener = this; // Should use a setter method instead
    }

}

关于这个

  

拥有多个onclicks是正常的

onClick(View v)只需要一个界面,您可以针对任何v.getId()值检查R.id,以查看点击的内容。