在其他类中使用abstract中的变量

时间:2015-04-02 08:19:26

标签: java android listview abstract-class

我是java和android开发的新手。我创建了一个抽象类,用于在我的app中显示listview。我的想法是我将使用常见的listview只更改其适配器。但我没有得到listview定义在扩展它的类中使用的抽象类。请帮助我

抽象类代码

 public abstract class GeneralListView extends MasterFragment {

    protected ListView listView;



    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.common_list, container, false);
        listView = (ListView) view.findViewById(R.id.lv_common_list);
        return view;
    }

    public abstract void initializeList();

    public ListView getListView() {
        return listView;
    }


}

扩展上述类

的类
 public class Test extends GeneralListView {

    private ListView listView;

    @Override
    public void initializeList() {
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(contextFragment, android.R.layout.activity_list_item, new String[]{"a", "b", "c", "d", "e", "f", "g", "h", "i", "a", "b", "c", "d", "e", "f", "g", "h", "i"});
        listView.setAdapter(adapter);

    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        getListView();
        initializeList();
    }

    @Override
    public ListView getListView() {
        return listView;
    }
}

异常

listView.setAdapter(adapter); //null pointer exception

4 个答案:

答案 0 :(得分:4)

无需覆盖子类中的getListVIew()&#34;测试&#34;类,你不需要私人ListView listView;您的&#34;测试&#34;中的属性类,

要调用超类中的方法或变量,如果您不使用任何具有相同名称的变量,则可以使用super关键字调用listView

super.listView 

并使用超级关键字

调用方法getListView()
super.getListView();

答案 1 :(得分:1)

您必须删除

private ListView listView;

语句,或者在构造函数中添加以下内容,

public Test(){
listView = super.getListView;//I assume this would return initialized listview
}

答案 2 :(得分:0)

删除

private ListView listView; 

@Override
public ListView getListView() {
    return listView;
}

来自

public class Test extends GeneralListView {

覆盖Test子类中的listView对象,而不是使用GeneralListView中的实例。

答案 3 :(得分:0)

你可以检查一下,你是否调用了onCreateView方法,因为我只能看到这个方法初始化listView引用。