簡體   English   中英

將變量從活動傳遞到片段時為空對象引用

[英]Null object reference when passing variable from activity to fragment

將變量從活動傳遞到片段時,我得到一個空對象引用,但我無法找出問題所在。 我試圖傳遞的變量是currentPollName 任何幫助,將不勝感激。

這是 GroupActivity:

public class GroupActivity extends AppCompatActivity {

    private ViewPager myViewPager;
    private TabLayout myTabLayout;
    private GroupTabsAccessorAdapter myTabsAccessorAdapter;
    private String currentPollName;

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

        currentPollName = getIntent().getExtras().get("pollName").toString();
        Toast.makeText(GroupActivity.this, currentPollName, Toast.LENGTH_SHORT).show();

        Bundle bundle = new Bundle();
        bundle.putString("pollName", currentPollName);
        PollFragment fragInfo = new PollFragment();
        fragInfo.setArguments(bundle);

        Toolbar toolbar = (Toolbar) findViewById(R.id.group_page_toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setTitle(currentPollName);

        myViewPager = (ViewPager) findViewById(R.id.group_tabs_pager);
        myTabsAccessorAdapter = new GroupTabsAccessorAdapter(getSupportFragmentManager());
        myViewPager.setAdapter(myTabsAccessorAdapter);

        myTabLayout = (TabLayout) findViewById(R.id.group_tabs);
        myTabLayout.setupWithViewPager(myViewPager);
    }

    public String getGroupName() {
        return currentPollName;
    }
}

這是 PollFragment OnCreateView

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        pollView = inflater.inflate(R.layout.fragment_poll, container, false);

        currentPollName = getArguments().getString("pollName");


        mAuth = FirebaseAuth.getInstance();
        currentUserID = mAuth.getCurrentUser().getUid();
        UsersRef = FirebaseDatabase.getInstance().getReference().child("Users");
        GroupNameRef = FirebaseDatabase.getInstance().getReference().child("Groups").child(currentPollName);

        InitializeFields();

        RetrieveDisplayPollOptions();

        newOption.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                RequestNewPollOption();
            }
        });

        submitOption.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SavePollOption();
            }
        });

        return pollView;

    }

這是啟動 GroupActivity 的 Itent

list_view.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String currentPollName = list_view.getItemAtPosition(position).toString();

                Intent pollIntent = new Intent(getContext(), GroupActivity.class);
                pollIntent.putExtra("pollName", currentPollName);
                startActivity(pollIntent);
            }
        });

我在代碼中發現了以下內容

  1. fragInfo Fragment 不會傳遞給GroupTabsAccessorAdapter 所以把fragment加到adapter然后寫myViewPager.setAdapter(myTabsAccessorAdapter);
  2. 在 PollFragment 中移動currentPollName = getArguments().getString("pollName"); onViewCreated ,如下所示。
public void onViewCreated(View view, @Nullable Bundle savedInstanceState)
        {
            super.onViewCreated(view, savedInstanceState);
            currentPollName = getArguments().getString("pollName");
        }`

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM