所以我試着做一個下拉菜單,其中菜單上的每個項目對應一個城市的名稱(紐約,洛杉磯,舊金山等) 。下拉菜單中的城市/項目數對於每個用戶都不同,因此我不能使用switch語句。所以,讓我通過代碼來介紹你們,這很有道理。如何在使用紡紗器時從textview中獲取文本
1)我首先製作了這個CitySpinner ArrayAdapter,並在該類中有一個名爲getCustomView的方法,它返回一個視圖。
public View getCustomView(int position, View convertView, ViewGroup parent)
{
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.spinner_cityfolder,parent,false);
TextView cityName = (TextView) layout.findViewById(R.id.tvLanguage);
ImageView cityImage = (ImageView) layout.findViewById(R.id.imgLanguage);
cityName.setText(foldersArrayList.get(position).getName());
cityImage.setImageResource(R.drawable.small_icon_bar);
return layout;
}
// It gets a View that displays in the drop down popup the data at the specified position
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent)
{
return getCustomView(position, convertView, parent);
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
return getCustomView(position, convertView, parent);
}
2)現在在我顯示的下拉菜單中的活動我做一個實例的微調,稱爲dropDownSpinner並傳遞citySpinner適配器。
citySpinner = new CitySpinner(getApplicationContext(),R.layout.spinner_cityfolder,Global_Class.getInstance().getValue().cityFoldersArrayList);
dropDownspinner.setAdapter(citySpinner);
3),那麼我做onItemSelectedListener,在這裏,我試圖讓他們點擊文件夾的名稱的文本。然後將它與我在某些全球數據列表中的所有城市名稱進行比較。如果他們匹配,給我一些信息。但問題是,當我使用下面的folderName.getText()時,它引用了null。無論如何,我可以獲得當前視圖的文字嗎?
dropDownspinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l)//Create a class that returns a custom View that's a textView of the city Name.
{
check++;
if(check > 1)
{
TextView folderName = (TextView) findViewById(R.id.tvLanguage);
for(CityFolders TempFolders: Global_Class.getInstance().getValue().cityFoldersArrayList)
{
if(adapterView.getAdapter().equals(citySpinner))
{
if(((CitySpinner) adapterView.getAdapter()).getCityName(i).equals(TempFolders.getName()))
{
//Toast.makeText(getApplicationContext(),((CitySpinner) adapterView.getAdapter()).getCityName(i),Toast.LENGTH_SHORT).show();
Spinner newDropDownSpiner = (Spinner) findViewById(R.id.spinner);
newDropDownSpiner.setAdapter(new CardSpinner(getApplicationContext(),R.layout.spinner_cards,TempFolders.getCards()));
//dropDownspinner.setAdapter(new CardSpinner(getApplicationContext(), R.layout.spinner_cards, TempFolders.getCards()));
break;
}
else
{
//Do nothing
}
}
else
{
Toast.makeText(getApplicationContext(),"Not the same type of spinner",Toast.LENGTH_SHORT).show();
}
}
}
else
{
//Do nothing
}
}
這裏是我的堆棧跟蹤:
12-22 13:58:29.627 9553-9553/com.lorentzos.swipecards.example E/AndroidRuntime:致命異常:主要
Process: com.lorentzos.swipecards.example, PID: 9553
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence android.widget.TextView.getText()' on a null object reference
at com.lorentzos.swipecards.MyActivity$1$1.onItemSelected(MyActivity.java:176)
at android.widget.AdapterView.fireOnSelected(AdapterView.java:914)
at android.widget.AdapterView.dispatchOnItemSelected(AdapterView.java:903)
at android.widget.AdapterView.access$300(AdapterView.java:48)
at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:873)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5430)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:913)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:706)
佈局tvLanguage
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="75dp"
android:padding="3dip"
android:background="#434343">
<ImageView
android:id="@+id/imgLanguage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" >
</ImageView>
<TextView
android:id="@+id/tvLanguage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="8dp"
android:text="Text Here"
android:textColor="#86f6e7">
</TextView>
</LinearLayout>
你能後的佈局'tvLanguage'是的XML? –
@安德魯布魯克是啊,我把它貼在上面。 – TheQ