【问题标题】:Call to Fragment in pageAdapter can not resolve newInstance methods在 pageAdapter 中调用 Fragment 无法解析 newInstance 方法
【发布时间】:2015-09-29 19:23:30
【问题描述】:

在这段代码中,错误是它无法解析 PageAdapter 类中的 newInstance 方法,据说永远不要在 Fragment.java 中使用 newInstance。我该如何解决这个问题?

我想要一个带有 viewpager 和片段的页面。滑动手指时,将 mt text view 的文本从 String 改变

ListActivity.java

package com.example.farjad.mymoneyapp.ListViewPages.Page1;

import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

import com.example.farjad.mymoneyapp.Adaptor.PageAdapter;
import com.example.farjad.mymoneyapp.R;

public class ListActivity1_P1 extends FragmentActivity {
    private ViewPager viewPager;




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list_activity1__p1);
        viewPager = (ViewPager) findViewById(R.id.curl);
        viewPager.setAdapter(new PageAdapter(getSupportFragmentManager()));



    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_list_activity1__p1, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

这是我的 PageAdapter.java

     package com.example.farjad.mymoneyapp.Adaptor;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.PagerAdapter;

import com.example.farjad.mymoneyapp.R;

/**
 * Created by Farjad on 9/27/2015.
 */
public class PageAdapter extends FragmentPagerAdapter {


    private  String[] string;

    public PageAdapter(FragmentManager fm, String [] stringstodisplay) {
        super(fm);
        this.string = stringstodisplay;


    }

    public PageAdapter(FragmentManager supportFragmentManager) {
        super(supportFragmentManager);
    }

    @Override
    public android.support.v4.app.Fragment getItem(int position) {

        switch (position) {
            default:
            case 0:
                return Fragment.newInstance(0, android.app.Fragment.class.getSigners());

            case 1:
                return new Fragment.instantiate(0, getString( R.string.s1p1));;

            case 2:
                return new Fragment..instantiate(0, getString( R.string.s1p2));;;


        }


    }

    @Override
    public int getCount() {
        return 5;
    }
}

片段.java

package com.example.farjad.mymoneyapp;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

/**
 * Created by Farjad on 9/27/2015.
 */
public class Fragment extends android.support.v4.app.Fragment {
    private int page;
    private String text;

    public static Fragment newInstance(int page,String text) {

        Fragment f = new Fragment();
        Bundle b = new Bundle();
        b.putInt("someInt",page);
        b.putString("text", text);

        f.setArguments(b);

        return f;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        page = getArguments().getInt("s",0);
        text = getArguments().getString("someTitle","text");
    }

    public Fragment() {
    }

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

        TextView tvLabel = (TextView) v.findViewById(R.id.textView);

        tvLabel.setText(page + " -- " + text);
        return v;

      }

}

【问题讨论】:

    标签: android-fragments fragment adapter instance


    【解决方案1】:

    那是因为您调用了 Fragment 类 - Fragment,所以在 PageAdapter 中它导入了支持 Fragment 类而不是您扩展的 Fragment 类。我会将您的 Fragment 类重命名为其他任何名称(例如,MyFragment)并让 IDE 为您解决依赖关系,但您也可以更改 PageAdapter 类中的 import 语句以导入您的 Fragment类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-28
      • 2015-02-10
      • 1970-01-01
      • 1970-01-01
      • 2021-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多