java - 类中的访问方法

标签 java android class methods call

如何从 FragmentTwo 类中调用 listview 方法?我使用的是基于 fragment 的 NavDrawer,因此我必须在 FragmentTwo 类中启动 ListView。 这是我的代码:

    package xy;
    import android.content.Context;
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import android.widget.TextView;
    import android.widget.Toast;


    public class FragmentTwo extends Fragment {
View rootview;
private Context context;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    rootview = inflater.inflate(R.layout.fragment_two, container, false);
    return rootview;
    list.this.listview();
}
class list extends MainActivity{
        public void listview(){
            String[] listcontent = {"Test1","text2","text4"};
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, getView().R.layout.listviewcontent, listcontent);
            ListView listView = (ListView) getView().findViewById(R.id.list);
            listView.setAdapter(adapter);
        }
        public void registerClickCallback() {
            ListView listView = (ListView) findViewById(R.id.list);
            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    TextView textView = (TextView) view;
                    String message = "You clicked # " + position + " which is:" + textView.getText().toString();
                    Toast.makeText(list.this, message, Toast.LENGTH_LONG).show();

                }
            });
        }


    }

}

我的主要问题是错误消息

    .....is not an enclosing class

调用list.this.listview()时;来自 onCreate 方法。

最佳答案

这不是调用 Fragment 的父 Activity 中的方法的正确方法。

您可以通过以下方式获取父Activity:

MainActivity activity = (MainActivity) getActivity();

然后您可以以这种方式访问​​其方法:

activity.callSomeMethodInYourActivity();

更新:

此外,您的 onCreateView() 会抛出“无法访问的语句”错误,因为您在 return 语句之后有代码。此代码无法执行,因为到达 return 语句时该方法已退出。

完整的解决方案:

将其放入您的 MainActivity.java 文件中:

public void listview(){
    String[] listcontent = {"Test1","text2","text4"};
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, getView().R.layout.listviewcontent, listcontent);
    ListView listView = (ListView) getView().findViewById(R.id.list);
    listView.setAdapter(adapter);
}

public void registerClickCallback() {
    ListView listView = (ListView) findViewById(R.id.list);
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            TextView textView = (TextView) view;
            String message = "You clicked # " + position + " which is:" + textview.getText().toString();
            Toast.makeText(list.this, message, Toast.LENGTH_LONG).show();
        }
    });
}

你的 fragment 应该如下所示:

public class FragmentTwo extends Fragment {
    View rootview;
    private Context context;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        rootview = inflater.inflate(R.layout.fragment_two, container, false);

        MainActivity activity = (MainActivity) getActivity();
        activity.listview()

        return rootview;
    }
}

毕竟我不太明白为什么你不直接将 listview()registerClickCallback() 方法放在 Fragment 中。恕我直言,这更有意义......

关于java - 类中的访问方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29571239/

相关文章:

java - 我有一个成对的列表,如何检查列表是否包含特定元素。list.contains 函数总是给出 false

java - AssertionError 的 getMessage() 奇怪地为 null

android - 运行 main.dart I/flutter (15748) : Observatory listening on ************************************ 后无法获得输出

c++ - 在C++类中执行while循环

java - 如何向 Java SOAP 客户端提供证书?

java - 计算包括假期在内的工作日

android - com.google.api.services.tasks.TasksRequest 在哪里?

java - android中一切之上的按钮

python - 如何继承类的方法并让它们访问python中的自身成员变量

class - 自定义类 : No class matching "..." in urn:import: 的 GWT 延迟绑定(bind)失败