Android 尝试使用settext函数时出现空指针异常
我有两个导航选项卡,每个导航选项卡包含一个列表视图。每个listview都由几个组件组成,包括我正在尝试编辑的textview 我试图在定义每个片段的类中为文本视图设置文本,但得到一个空指针异常 以下是一些代码摘录: 查看寻呼机Android 尝试使用settext函数时出现空指针异常,android,android-layout,android-activity,android-fragments,Android,Android Layout,Android Activity,Android Fragments,我有两个导航选项卡,每个导航选项卡包含一个列表视图。每个listview都由几个组件组成,包括我正在尝试编辑的textview 我试图在定义每个片段的类中为文本视图设置文本,但得到一个空指针异常 以下是一些代码摘录: 查看寻呼机 <android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/titleTaskList" androi
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/titleTaskList"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v4.view.ViewPager>
在这个类中,我定义了选项卡:
public class TaskListAndOptionsActivity extends FragmentActivity implements ActionBar.TabListener {
private ViewPager viewPager;
private TabsPagerAdapter mAdapter;
private static ActionBar actionBar;
private static Context context;
// Tab titles
private String[] tabs = { "Arabic", "English"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_task_list_and_options);
viewPager = (ViewPager) findViewById(R.id.titleTaskList);
actionBar = getActionBar();
getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
getActionBar().setCustomView(R.layout.actionbar);
getActionBar().setDisplayShowHomeEnabled(true);
mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(mAdapter);
actionBar.setHomeButtonEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// Adding Tabs
for (String tab_name : tabs) {
actionBar.addTab(actionBar.newTab().setText(tab_name)
.setTabListener(this));
}
/**
* on swiping the viewpager make respective tab selected
* */
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// on changing the page
// make respected tab selected
actionBar.setSelectedNavigationItem(position);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
}
最后,在这个类中,我试图为每个片段设置这个类
public class ArabicFragment extends ListFragment {
public static ArrayList<String> taskListAr = new ArrayList<String>();
private static Context context;
private static LayoutInflater inflater=null;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Log.d("changing layout","arabic");
View rootView = inflater.inflate(R.layout.fragment_tasklistar, container, false);
return rootView;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
displayTaskList();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), R.layout.list_itemar,R.id.title, taskListAr);
setListAdapter(adapter);
}
TextView taskDetails = (TextView)getView().findViewById(R.id.taskdetails);
taskDetails.setText("trial");
如果这不是调用settext的正确位置,那么应该在哪里调用它?您必须使用onCreateView方法编写
创建一个方法并使用View作为参数,并使用它进行任何类型的初始化。。例如:
private void initialze(View mView){
TextView taskDetails = (TextView)mView.findViewById(R.id.taskdetails);
taskDetails.setText("trial");
}
并使用onCreateView中的方法,如
它非常简单,而且遵循android编程标准。将你的.setText。。。。在您的onCreateView中。。。。。并尝试使用TextView taskDetails=TextViewrootView.findViewByIdR.id.taskDetails;您可以使用getSupportActionBar.settExt编辑文本;问题是fragment_tasklistar只包含listview定义,但是listview中的项的初始化在另一个布局xml中,如上所示,这是导致错误的原因吗?您必须实现适配器才能将数据加载到listview中。非常感谢!我没有使用你提供的链接,但是你确实让我走上了正确的道路。我使用了这个链接:我开发了一个小例子,效果非常好!在原生Android中,事情可能会变得有点复杂!从PhoneGap切换…@Farah-hmm。。。祝未来的节目好运-您的代码虽然整洁,但仍然会导致相同的问题,fragment_tasklistar只包含listview定义,但是listview中的项的初始化在另一个布局xml中,如上所示,这是导致空指针异常的原因吗?是否要使用此片段中textview所在的布局?或者两个布局都在一个片段中?首先明确你的要求..不,我不希望它们都在一个布局中,那无论如何都不行。我想要的是设置listfragment classi中的文本,我也建议与CapDroid所说的相同。使用您自己的自定义适配器类,并通过getView方法将数据放入文本中。谢谢,我确实使用了自定义适配器,这似乎是唯一的解决方法。
public class TaskListAndOptionsActivity extends FragmentActivity implements ActionBar.TabListener {
private ViewPager viewPager;
private TabsPagerAdapter mAdapter;
private static ActionBar actionBar;
private static Context context;
// Tab titles
private String[] tabs = { "Arabic", "English"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_task_list_and_options);
viewPager = (ViewPager) findViewById(R.id.titleTaskList);
actionBar = getActionBar();
getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
getActionBar().setCustomView(R.layout.actionbar);
getActionBar().setDisplayShowHomeEnabled(true);
mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(mAdapter);
actionBar.setHomeButtonEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// Adding Tabs
for (String tab_name : tabs) {
actionBar.addTab(actionBar.newTab().setText(tab_name)
.setTabListener(this));
}
/**
* on swiping the viewpager make respective tab selected
* */
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// on changing the page
// make respected tab selected
actionBar.setSelectedNavigationItem(position);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
}
public class ArabicFragment extends ListFragment {
public static ArrayList<String> taskListAr = new ArrayList<String>();
private static Context context;
private static LayoutInflater inflater=null;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Log.d("changing layout","arabic");
View rootView = inflater.inflate(R.layout.fragment_tasklistar, container, false);
return rootView;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
displayTaskList();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), R.layout.list_itemar,R.id.title, taskListAr);
setListAdapter(adapter);
}
TextView taskDetails = (TextView)getView().findViewById(R.id.taskdetails);
taskDetails.setText("trial");
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Log.d("changing layout","arabic");
View rootView = inflater.inflate(R.layout.fragment_tasklistar, container, false);
TextView taskDetails = (TextView)rootView.findViewById(R.id.taskdetails);
taskDetails.setText("trial");
return rootView;
}
private void initialze(View mView){
TextView taskDetails = (TextView)mView.findViewById(R.id.taskdetails);
taskDetails.setText("trial");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Log.d("changing layout","arabic");
View rootView = inflater.inflate(R.layout.fragment_tasklistar, container, false);
initialze(rootView );
return rootView;
}