2013-04-02 4 views
0

선택한 항목을 스피너에서 직접 가져온 후 선택한 항목을 표시하려고합니다. 이것이 퀴즈 게임과 같은지 상상해보십시오. 잘못된 항목 중 하나를 선택하면 TOAST가 표시됩니다 (작동하지 않음). 내가 올바른 것을 선택하면 다른 TOAST가 나타나고 그것을 새로운 활동에 연결합니다. 출력을 선택하거나 textview에 선택 사항을 표시하려면 어떻게해야합니까? 그리고 옳고 그른 대답을 위해 if 문을 구현하는 방법은 무엇입니까?Android : TextView로 선택한 스피너 항목을 만드는 방법?

package com.example.test; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemSelectedListener; 
import android.widget.ArrayAdapter; 
import android.widget.Spinner; 
import android.widget.TextView; 

public class MainActivity extends Activity implements OnItemSelectedListener{ 

String[] test_array; 
TextView display, selected; 
String result; 
Spinner spinner; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Spinner spinner = (Spinner) findViewById(R.id.spinner); 
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.test_array, android.R.layout.simple_spinner_item); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner.setAdapter(adapter); 
} 

@Override 
public void onItemSelected(final AdapterView<?> parent, View view, final int pos, 
     long id) { 
    // TODO Auto-generated method stub 
    result = (String) spinner.getSelectedItem(); 
    display = (TextView) findViewById (R.id.display); 
    display.setText(result); 
} 

@Override 
public void onNothingSelected(AdapterView<?> arg0) { 
    // TODO Auto-generated method stub 

} 
} 

Google의 SDK 샘플과 관련하여 개정되었습니다. 여기에 개정 된 코드가 있습니다.

package com.example.test; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemSelectedListener; 
import android.widget.ArrayAdapter; 
import android.widget.Spinner; 
import android.widget.TextView; 

public class MainActivity extends Activity{ 

String[] test_array; 
TextView display, selected; 
String result, sSelect; 
Spinner spinner; 
int mPos; 
String mSelection; 
ArrayAdapter<CharSequence> mAdapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Spinner spinner = (Spinner) findViewById(R.id.spinner); 
    this.mAdapter = ArrayAdapter.createFromResource(this, R.array.test_array, android.R.layout.simple_spinner_dropdown_item); 
    spinner.setAdapter(this.mAdapter); 
    OnItemSelectedListener listener = new myOnItemSelectedListener(); 
    spinner.setOnItemSelectedListener(listener); 
} 

public class myOnItemSelectedListener implements OnItemSelectedListener { 

    @Override 
    public void onItemSelected(AdapterView<?> parent, View v, int pos, 
      long id) { 
     // TODO Auto-generated method stub 
     MainActivity.this.mPos = pos; 
     MainActivity.this.mSelection = parent.getItemAtPosition(pos).toString(); 
     TextView resultText = (TextView) findViewById(R.id.display); 
     resultText.setText(MainActivity.this.mSelection); 
    } 

    @Override 
    public void onNothingSelected(AdapterView<?> parent) { 
     // TODO Auto-generated method stub 

    } 

} 
} 

텍스트 뷰는 지금은 경우/다른 시도합니다 이제, 선택한 항목으로 변경됩니다. if/else 문으로 인해 충돌이 발생합니다.

04-03 01:38:17.648: E/AndroidRuntime(817): FATAL EXCEPTION: main 
04-03 01:38:17.648: E/AndroidRuntime(817): java.lang.NullPointerException 
04-03 01:38:17.648: E/AndroidRuntime(817): at com.example.test.MainActivity$myOnItemSelectedListener.onItemSelected(MainActivity.java:43) 
04-03 01:38:17.648: E/AndroidRuntime(817): at android.widget.AdapterView.fireOnSelected(AdapterView.java:892) 
04-03 01:38:17.648: E/AndroidRuntime(817): at android.widget.AdapterView.access$200(AdapterView.java:49) 
04-03 01:38:17.648: E/AndroidRuntime(817): at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:860) 
04-03 01:38:17.648: E/AndroidRuntime(817): at android.os.Handler.handleCallback(Handler.java:615) 
04-03 01:38:17.648: E/AndroidRuntime(817): at android.os.Handler.dispatchMessage(Handler.java:92) 
04-03 01:38:17.648: E/AndroidRuntime(817): at android.os.Looper.loop(Looper.java:137) 
04-03 01:38:17.648: E/AndroidRuntime(817): at android.app.ActivityThread.main(ActivityThread.java:4745) 
04-03 01:38:17.648: E/AndroidRuntime(817): at java.lang.reflect.Method.invokeNative(Native Method) 
04-03 01:38:17.648: E/AndroidRuntime(817): at java.lang.reflect.Method.invoke(Method.java:511) 
04-03 01:38:17.648: E/AndroidRuntime(817): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
04-03 01:38:17.648: E/AndroidRuntime(817): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
04-03 01:38:17.648: E/AndroidRuntime(817): at dalvik.system.NativeStart.main(Native Method) 
04-03 01:39:04.718: E/Trace(865): error opening trace file: No such file or directory (2) 
04-03 01:39:06.028: D/gralloc_goldfish(865): Emulator without GPU emulation detected. 

구현 코드

public class myOnItemSelectedListener implements OnItemSelectedListener { 

@Override 
public void onItemSelected(AdapterView<?> parent, View v, int pos, 
     long id) { 
    // TODO Auto-generated method stub 
    MainActivity.this.mPos = pos; 
    MainActivity.this.mSelection = parent.getItemAtPosition(pos).toString(); 
    TextView resultText = (TextView) findViewById(R.id.display); 
    resultText.setText(MainActivity.this.mSelection); 
    if(result.equalsIgnoreCase("abc")){ 
    // Toast in here 
    }else{ 
} 
} 
+0

이 코드를 사용하면 어떤 결과가 나타 납니까? – hardartcore

+0

현재 코드 사용. 오류 없음. TextView가 변경되지 않습니다. – Malaka

답변

3

@Override 
    public void onItemSelected(AdapterView<?>; parent, View view, int position, long id) { 
     // On selecting a spinner item 
     String item = parent.getItemAtPosition(position).toString(); 

     // Showing selected spinner item 
     Toast.makeText(parent.getContext(), "Selected: " + item, Toast.LENGTH_LONG).show(); 

    } 

if-else 문 귀하의 설명에 따라

spinner = (Spinner) findViewById(R.id.test); 

     spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 

      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, 
        int position, long id) { 

       String item = "nothing"; 
       // On selecting a spinner item 
       if(parent.getItemAtPosition(position).toString().equalsIgnoreCase("novels")) 
        item = parent.getItemAtPosition(position).toString(); 
       else{ 
        //do other things 
       } 

       // showing a toast on selecting an item 
       Toast.makeText(parent.getContext(), item, Toast.LENGTH_LONG).show(); 
      } 

      @Override 
      public void onNothingSelected(AdapterView<?> arg0) { 
       // TODO Auto-generated method stub 

      } 

     }); 
+0

Toast의 open()에서 오류를 표시하지 않지만 내가 선택할 때 토스터가 나타나지 않습니다. 단추를 추가해야한다고 생각하지만 어떻게 통합 할 수 있습니까? – Malaka

+0

작성한'TextView'에'item'을 추가하십시오. 'resultText.setText (item); ' –

+0

편집 된 새 코드를 보면 setText가 이미 수정되었습니다. 이제 내 문제는 if/else 문이 충돌을 일으켰습니다. 당신이 그것을 볼 수 있다면. – Malaka

0

이 시도하려고 :

@Override 
public void onItemSelected(final AdapterView<?> parent, View view, final int pos, 
     long id) { 
    // TODO Auto-generated method stub 
    result = spinner.getSelectedItem().toString(); 
    display = (TextView) findViewById (R.id.display); 
    display.setText(result); 
    if(result.equalsIgnoreCase("abc")){ 
     // for correct ans... open new activity using intent 
    }else{ 
     // for wrong ans... 
    } 
} 
+0

감사합니다. 일단 TextView가 작동하면 if 문을 사용해 보겠습니다. – Malaka

관련 문제