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类的构造函数中传递的对象类型和接收的对象类型之间存在冲突。问题是我只能做一个构造函数。我没有理解你。你能重复一遍吗?你是说你只能有一个构造函数吗?你有没有像我在评论中提到的那样试着打字?太好了。如果你愿意,你可以回答你自己的问题。它可能会帮助别人找到正确的答案。