如何在android中的listView中访问布局

时间:2014-02-10 21:38:22

标签: android listview android-listview

我在Activity中有一个ListView,在ListView中我有另一个Layout,它给列表提供了内容。这是代码

SimpleAdapter adapter = new SimpleAdapter(this.getActivity(),listvalue,
                 R.layout.singlepost,v,s);                                            
list.setAdapter(adapter);  

singlepost是我加载到listView的布局,但是这个单子帖有几个我想要访问的按钮,但是我无法访问按钮,因为它没有加载包含ListView的活动,所以当我尝试访问这样的按钮时

ImageButton star = (ImageButton)findViewById(R.id.star);

它告诉我您尝试访问的视图不在此活动范围内。我知道除了你使用Fragments之外不可能使用两个setContentView(R.layout.activity_main);。那么如何访问单柱布局中的按钮呢。

注意:当我的意思是Access时,我的意思是点击并让按钮做一些事情,我已经完成了所有必需的声明和实例化,我只需要一种方法来访问该按钮。谢谢。希望我的问题很清楚。

1 个答案:

答案 0 :(得分:0)

我很漂亮你必须制作自己的适配器,扩展一些适配器(SimpleAdapterArrayAdapter,...)。并在getView()方法中设置任何必要的侦听器:

public class MySimpleArrayAdapter extends ArrayAdapter<String> {

    private final Context context;
    private final String[] values;
    private LayoutInflater inflater;

    public MySimpleArrayAdapter(Context context, String[] values) {
        super(context, R.layout.row_layout, values);
        this.context = context;
        this.values = values;
        this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        if(convertView == null){
            convertView = inflater.inflate(R.layout.row_layout, parent, false);    
        }

        Button button = (Button) convertView.findViewById(R.id.button);
            button.setOnClickListener(new View.OnClickListener() {
               public void onClick(View v) {
                  // Perform action on click
               }
            });

        return convertView;
    }

}

编辑SimpleAdapter的示例。请注意,我没有尝试过,但理论上我应该相信它。

public class MyAdapter extends SimpleAdapter {

    private List list;

    public MyAdapter(Context context, List  list, int resource, String[] from, int[] to) {
        super(context, list, resource, from, to);
        this.list = list;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        convertView = super.getView(position, convertView, parent);

        Button button = (Button) convertView .findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // Perform action on click
            }
        });

        return convertView;
    }
}