Android中的OnTableListener不工作

Android中的OnTableListener不工作,android,Android,我遇到了一个问题,当我输入一个片段的名称时,出现了一个错误,如下所示: Type mismatch: cannot convert from Fragment1 to Fragment 以下是我的MainActivity.java代码: package com.example.currencyconverter; import android.app.ActionBar; import android.app.ActionBar.Tab; import android.app.Activi

我遇到了一个问题,当我输入一个片段的名称时,出现了一个错误,如下所示:

Type mismatch: cannot convert from Fragment1 to Fragment
以下是我的MainActivity.java代码:

package com.example.currencyconverter;


import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.os.Bundle;
import android.os.StrictMode;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.LayoutInflater;
import android.view.View;


public class MainActivity extends Activity implements OnClickListener {

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

ActionBar actionBar = getActionBar();
actionBar.setSubtitle("Created By Rohit Nandakumar");
actionBar.setTitle("Currency Converter"); 
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

ActionBar.Tab Frag1 = actionBar.newTab().setText("Converter");
ActionBar.Tab Frag2 = actionBar.newTab().setText("Currencies");

Fragment fragment1 = new Fragment1();
Fragment fragment2 = new Fragment2();

Frag1.setTabListener(new MyTabsListener(fragment1));
Frag2.setTabListener(new MyTabsListener(fragment2));

actionBar.addTab(Frag1);
actionBar.addTab(Frag2);
}
以下是我的片段1代码:

package com.example.currencyconverter;

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class Fragment1 extends Fragment{
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.activity_main, container, false);
}
}
这是我的片段2代码:

package com.example.currencyconverter;

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class Fragment2 extends Fragment{
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.activity_first, container, false);
}
}
以下是MyTabsListener.java文件:

package com.example.currencyconverter;

import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.ActionBar;
import android.app.Fragment;
import android.app.FragmentTransaction;

public class MyTabsListener implements TabListener {

public Fragment fragment;

public MyTabsListener(Fragment fragment) {
    this.fragment = fragment;
}

@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
    // TODO Auto-generated method stub
}

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
    // TODO Auto-generated method stub
    ft.replace(R.id.fragment_container, fragment);

}

@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
    // TODO Auto-generated method stub

}
Fragment fragment1 = new Fragment1();
Fragment fragment2 = new Fragment2();
} 问题就出现在MainActivity.java文件中:

package com.example.currencyconverter;

import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.ActionBar;
import android.app.Fragment;
import android.app.FragmentTransaction;

public class MyTabsListener implements TabListener {

public Fragment fragment;

public MyTabsListener(Fragment fragment) {
    this.fragment = fragment;
}

@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
    // TODO Auto-generated method stub
}

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
    // TODO Auto-generated method stub
    ft.replace(R.id.fragment_container, fragment);

}

@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
    // TODO Auto-generated method stub

}
Fragment fragment1 = new Fragment1();
Fragment fragment2 = new Fragment2();

new Fragment2();
代码的一部分被突出显示,并表示:

Type mismatch: cannot convert from Fragment1 to Fragment
发生了什么事?我做错了什么?非常感谢您的帮助。我以前已经问过这个问题,但是我没有得到正确的答案。我在互联网上到处搜索,试图找到答案。再次感谢您的帮助。

而不是:

Fragment fragment1 = new Fragment1();
Fragment fragment2 = new Fragment2();
试着做:

Fragment1 fragment1 = new Fragment1();
Fragment2 fragment2 = new Fragment2();
您需要为已创建的片段类创建新对象(即创建类
Fragment1
Fragment2
的对象,而不是
Fragment
类型的对象)

按照您所做的方式,您正在创建类型为
Fragment
的对象,但使用类型
Fragment1
Fragment2
初始化它。这就是它给出错误的原因


希望这有帮助

Fragm1.setTabListener(新MyTabsListener(fragment1));和fragm2.setTableListener(新的MyTabsListener(fragment2));如果说“构造函数MyTabsListener(Fragment1)未定义”和“构造函数MyTabsListener(Fragment2)未定义”,那么您可以尝试在发送到参数之前强制转换
Fragment1
Fragment2
,如Fragmg1.setTabListener(新MyTabsListener((Fragment)Fragment1));fragm2.setTabListener(新的MyTabsListener((Fragment)fragment2));试试看。我还没试过,但可能有用。显然,这个错误是由于在listener类的构造函数中传递的对象类型和接收的对象类型之间存在冲突。问题是我只能做一个构造函数。我没有理解你。你能重复一遍吗?你是说你只能有一个构造函数吗?你有没有像我在评论中提到的那样试着打字?太好了。如果你愿意,你可以回答你自己的问题。它可能会帮助别人找到正确的答案。