Comment implémenter le bouton dans ViewPager?

J'ai un ViewPager et je dois utiliser un bouton là-bas. Button doit reconnaître la voix et la montrer dans un TextView. J'implique la même mise en page pour VoiceRecognition et pour ViewPager.

La question est: comment activer le bouton pour exécuter VoiceRecognition après le clic. J'essaie de définir une étiquette sur un Button et TextView, mais je le fais mal, ça ne fonctionne pas.

  • Définir le titre pour la barre d'action contextuelle
  • Android Obtenir l'orientation d'un Bitmap de caméra? Et reculer de 90 degrés
  • Exemple utilisant l'androïde lrucache
  • Comment cacher l'emplacement actuel dans Google Map?
  • Effet de transition bouton ActionBar up
  • Crash dans ListView à AbsListView.obtainView pour ListActivity
  • ViewPager :

     public class SwipeAdapter extends PagerAdapter{ private int[] car = {R.string.car1, R.string.car2, R.string.car3, R.string.car4, R.string.car5}; private Context context; private LayoutInflater layoutInflater; public SwipeAdapter(Context context){ this.context = context; } @Override public int getCount() { return car.length; } @Override public boolean isViewFromObject(View view, Object object) { return (view==(RelativeLayout)object); } @Override public Object instantiateItem(ViewGroup container, int position) { layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View itemView = layoutInflater.inflate(R.layout.carSwipe, container, false); //Implement the Button Button carBut = (Button)itemView.findViewById(R.id.buttonCar); carButton.setTag("car"); TextView textView = (TextView) itemView.findViewById(R.id.interTextView); textView.setTag("text"); textView.setText(car[position]); container.addView(itemView); return itemView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((RelativeLayout)object); } } 

    Reconnaissance vocale

     public class MainActivity extends AppCompatActivity implements View.OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.carSwipe); Button recognizeButton = (Button)findViewById(R.id.button1); recognizeButton.setOnClickListener(this); } @Override public void setContentView(View context) { final DisplayMetrics dm = context.getResources().getDisplayMetrics(); final Configuration conf = context.getResources().getConfiguration(); conf.locale = new Locale("en"); context.getResources().updateConfiguration(conf, dm); } @Override public void onClick(View v) { Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "You may speak!"); intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en-US"); startActivityForResult(intent, 1); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1 && resultCode == RESULT_OK) { ArrayList<String> results; results = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); //Set a tag here TextView speechText = (TextView) mPager.findViewWithTag("text" + results); String str=""; for(int i=0;i<results.size();i++){ str+= results.get(i); } speechText.setText(str); } } } 

    Xml

     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:gravity="center|center_horizontal" android:id="@+id/linearLayout"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="Large Text" android:id="@+id/interTextView" /> </LinearLayout> <Button style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="recognition" android:id="@+id/buttonRec" android:layout_above="@+id/linearLayout" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" /> 

  • Android ACRA avec des exceptions manipulées
  • Comment utiliser et modifier le nouveau AlertDialog depuis AppCompat 22.1 et versions ultérieures
  • Quel est le bon moyen d'importer un projet Android Studio dans un dépôt SVN?
  • Comment désactiver le bouton Recent Tasks / Apps
  • Comment puis-je démarrer l'écran d'info sur les applications Android de manière programmée?
  • Définition de la source d'image pour ToggleButton
  • 2 Solutions collect form web for “Comment implémenter le bouton dans ViewPager?”

    Vous pouvez trouver la vue avec la balise requise à l'intérieur de ActivitéResult et la modifier selon les besoins:

     @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1 && resultCode == RESULT_OK) { .... Get required ID TextView linearLayout=(TextView) pager.findViewWithTag("page" + requiredId); ..... preform required chagnes } } 

    Vous devez définir les balises lorsque vous instanciez:

     public Object instantiateItem(ViewGroup container, int position) { .... textView.setTag("page" + position); .... } 

    Comment accéder aux vues depuis le téléavertisseur d'affichage

    Vous pouvez avoir surClickListener à l'intérieur de la méthode instantiateItem uniquement.

     import android.view.View.OnClickListener; public class SwipeAdapter extends PagerAdapter{ private int[] car = {R.string.car1, R.string.car2, R.string.car3, R.string.car4, R.string.car5}; private Context context; private LayoutInflater layoutInflater; private final int REQ_CODE_SPEECH_INPUT = 100; public SwipeAdapter(Context context){ this.context = context; } @Override public int getCount() { return car.length; } @Override public boolean isViewFromObject(View view, Object object) { return (view==(RelativeLayout)object); } @Override public Object instantiateItem(ViewGroup container, int position) { layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View itemView = layoutInflater.inflate(R.layout.carSwipe, container, false); //Implement the Button Button carBut = (Button)itemView.findViewById(R.id.buttonCar); carBut.setTag("car"); TextView textView = (TextView) itemView.findViewById(R.id.interTextView); textView.setTag("text"); textView.setText(car[position]); container.addView(itemView); carBut.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Log.d("pager position", ""+position); //do onClick event stuff here!! Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault()); intent.putExtra(RecognizerIntent.EXTRA_PROMPT,"You may Speak!!"); try { context.startActivityForResult(intent, REQ_CODE_SPEECH_INPUT); } catch (ActivityNotFoundException a) { Toast.makeText(context,"Speech not supported!!", Toast.LENGTH_SHORT).show(); } } }); return itemView; } 

    Ensuite, onActivityResult peut ressembler à ceci.

     @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case REQ_CODE_SPEECH_INPUT: { if (resultCode == RESULT_OK && null != data) { ArrayList<String> result = data .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); Log.d("SPEECHINPUT",""+result.get(0)); } break; } } } 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.