2012-03-12 93 views
13

Tôi đang cố triển khai mã nhận dạng giọng nói trong Android. Làm thế nào để có được một yếu tố ở một vị trí cụ thể từ danh sách mảng trong Android? Tôi đã thử chuyển đổi arraylist thành array và thử lại. Mã vẫn không hoạt động.Lấy một phần tử từ danh sách mảng trong Android?

package com.espeaker; 


    public class EspeakerActivity extends Activity { 

        private static final int REQUEST_CODE = 1234; 
      private ListView wordsList; 


      /** Called when the activity is first created. */ 
      @Override 
      public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 


        Button speakButton = (Button) findViewById(R.id.speakButton); 

        wordsList = (ListView) findViewById(R.id.list); 

        // Disable button if no recognition service is present 
        PackageManager pm = getPackageManager(); 
        List<ResolveInfo> activities = pm.queryIntentActivities(
          new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0); 
        if (activities.size() == 0) 
        { 
         speakButton.setEnabled(false); 
         speakButton.setText("Recognizer not present"); 
        } 
      } 

    /** 
    * Handle the action of the button being clicked 
    */ 
    public void speakButtonClicked(View v) 
    { 
     startVoiceRecognitionActivity(); 
    } 

    /** 
    * Fire an intent to start the voice recognition activity. 
    */ 
    private void startVoiceRecognitionActivity() 
    { 
     Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
     intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, 
       RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
     intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Voice recognition Demo..."); 
     startActivityForResult(intent, REQUEST_CODE); 
    } 

    /** 
    * Handle the results from the voice recognition activity. 
    */ 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    { 
     if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) 
     { 
      // Populate the wordsList with the String values the recognition engine thought it heard 
      ArrayList<String> matches = data.getStringArrayListExtra(
        RecognizerIntent.EXTRA_RESULTS); 
      wordsList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, 
        matches)); 
      String[] array=matches.toArray(new String[matches.size()]); 
      // ArrayList<String> places = new ArrayList<String>(
       // Arrays.asList("black", "blue", "red")); 
      ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item,matches); 
       final AutoCompleteTextView input_text = (AutoCompleteTextView) findViewById(R.id.auto); 
       Button button1 = (Button) findViewById(R.id.button1); 
        input_text.setAdapter(adapter); 
      button1.setText(" "+array[0]); 

      // button1.setText(""+matches); 
      } 
     super.onActivityResult(requestCode, resultCode, data); 
    } 
    } 
+0

bạn có thể làm cho mã đơn giản hơn nhiều thay vì đăng mã "thực tế". – Rakesh

Trả lời

2

Trong ArrayList bạn có một trật tự vị trí và không phải là một thứ tự danh nghĩa, vì vậy bạn cần phải biết trước vị trí yếu tố bạn cần phải lựa chọn hoặc bạn phải lặp giữa các yếu tố cho đến khi bạn tìm thấy những yếu tố mà bạn cần phải sử dụng . Để làm điều này bạn có thể sử dụng một iterator và nếu, ví dụ:

Iterator iter = list.iterator(); 
while (iter.hasNext()) 
{ 
    // if here   
    System.out.println("string " + iter.next()); 
} 
4
public class DemoActivity extends Activity { 
    /** Called when the activity is first created. */ 
    ArrayList<String> al = new ArrayList<String>(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 



     // add elements to the array list 

     al.add("C"); 
     al.add("A"); 
     al.add("E"); 
     al.add("B"); 
     al.add("D"); 
     al.add("F"); 

     // retrieve elements from array 

     String data = al.get(pass the index here); 
     System.out.println("Data is "+ data); 

Đây là một cách khác để nhận được yếu tố

 Iterator<String> it = al.iterator(); 
     while (it.hasNext()) { 
      System.out.println("Data is "+ it.next()); 
     } 
    } 
9

Những gì tôi hiểu câu hỏi của bạn là bạn muốn để tìm nạp phần tử trong một ArrayList tại một vị trí cụ thể.

Giả sử danh sách của bạn chứa Số nguyên 1,2,3,4,5 và bạn muốn tìm nạp giá trị 3. Sau đó, các dòng mã sau sẽ hoạt động.

ArrayList<Integer> list = new ArrayList<Integer>(); 
     if(list.contains(3)){//check if the list contains the element 
      list.get(list.indexOf(3));//get the element by passing the index of the element 
     } 

Hoặc cách bạn có thể sử dụng list.get(list.lastIndexOf(3))

40

Có lẽ những điều sau đây sẽ giúp bạn.

arraylistname.get(position); 
0

U không thể thử loại này

for (WordList i : words) { 
    words.get(words.indexOf(i)); 
} 
0

Tôi có một danh sách các vị trí của mảng để lấy, này đã làm việc cho tôi.

public void create_list_to_add_group(ArrayList<Integer> arrayList_loc) { 
    //In my case arraylist_loc is the list of positions to retrive from 
    // contact_names 
    //arraylist and phone_number arraylist 

    ArrayList<String> group_members_list = new ArrayList<>(); 
    ArrayList<String> group_members_phone_list = new ArrayList<>(); 

    int size = arrayList_loc.size(); 

    for (int i = 0; i < size; i++) { 

     try { 

      int loc = arrayList_loc.get(i); 
      group_members_list.add(contact_names_list.get(loc)); 
      group_members_phone_list.add(phone_num_list.get(loc)); 


     } catch (Exception e) { 
      e.printStackTrace(); 
     } 


    } 

    Log.e("Group memnbers list", " " + group_members_list); 
    Log.e("Group memnbers num list", " " + group_members_phone_list); 

} 
Các vấn đề liên quan