我想在我的android片段中使用微调器。为此,我写了以下代码:
package com.example.shiza.dailyquranverses;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.text.method.ScrollingMovementMethod;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
/**
* A simple {@link Fragment} subclass.
*/
public class completeQuran extends Fragment implements AdapterView.OnItemSelectedListener {
Spinner spinner;
public completeQuran() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.fragment_complete_quran, container, false);
spinner = (Spinner)view.findViewById(R.id.selectChapter);
ArrayAdapter adapter = ArrayAdapter.createFromResource(getActivity().getApplicationContext(),R.array.chapters,android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(this);
return view;
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
int quran_id;
String chapter_verse="";
TextView textView;
position++;
String chapter_array_name = "chapter_" + position;
quran_id = getResources().getIdentifier(chapter_array_name, "array", getActivity().getApplicationContext().getPackageName());
String[] chapter = getResources().getStringArray(quran_id);
for ( int item = 0 ; item < chapter.length ; item++ )
{
// if ( item > 0 )
// {
// chapter_verse += item + ". " ;
// }
chapter_verse += chapter[item] + "\n";
}
textView = (TextView)view.findViewById(R.id.verse);
textView.setText(chapter_verse);
textView.setMovementMethod(new ScrollingMovementMethod());
}
@Override
public void onNothingSelected(AdapterView<?> parent)
{
Toast.makeText(getActivity().getApplicationContext(),"Please enter your choice",Toast.LENGTH_LONG).show();
}
}
我在
收到错误onItemSelected方法中的textView.setText(chapter_verse);
。我正在使用它的视图从xml获取值。与片段对应的xml如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Spinner
android:id="@+id/selectChapter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/backgroundColor"
android:orientation="vertical">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:scrollbars="vertical"
tools:context="com.example.shiza.dailyquranverses.Quran">
<TextView
android:id="@+id/verse"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="2000"
android:scrollbars="vertical"
android:text="Hello from Quran"
android:textSize="@dimen/verse_font_chapter" />
</LinearLayout>
</ScrollView>
</LinearLayout>
请帮我解决这个问题。
答案 0 :(得分:2)
onItemSelected
回调会告诉您何时选择了Spinner
中的某个项目。作为该回调中的参数而存在的View
是View
中选定的Spinner
。出于这个原因,我猜你的textView
变量将是null
。您尝试访问的View
未包含在正在选择的View
中,它通常包含在您的布局中。您应该在TextView
内设置对OnCreateView
的引用,如下所示:
public class completeQuran extends Fragment implements AdapterView.OnItemSelectedListener
{
Spinner spinner;
TextView textView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.fragment_complete_quran, container, false);
spinner = (Spinner)view.findViewById(R.id.selectChapter);
ArrayAdapter adapter = ArrayAdapter.createFromResource(getActivity().getApplicationContext(),R.array.chapters,android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(this);
textView = (TextView)view.findViewById(R.id.verse); //notice the view that this is finding your textview within
return view;
}
}
然后,您可以在textView
回调中使用onItemSelected
的引用。您不需要每次都重新定义参考。
答案 1 :(得分:0)
这是因为setText吃了一个charSequence而你给了一个String 你需要使用
textView.setText(String.valueOf(chapter_verse))
答案 2 :(得分:0)
问题在于:
textView =(TextView)view.findViewById(R.id.verse);
我需要使用getView()方法而不是view方法。