2016-01-11 2 views
0

Итак, я настроил представление списка, которое заполняется из массива строк в файле strings.xml, и я не могу понять, как его кодировать, чтобы нажимать/нажимать на один из вариантов в списке начинает новое действие. Я знаю, что темы для этого уже существуют, но кажется, что я настраиваю свой список по-разному, поэтому представленные решения несовместимы. Вот мой mainactivity.java код:Запустить новое действие из ListView

public class MainActivity extends AppCompatActivity implements OnClickListener { 
Map<String, Integer> mapIndex; 
ListView consoleList; 
/** 
* ATTENTION: This was auto-generated to implement the App Indexing API. 
* See https://g.co/AppIndexing/AndroidStudio for more information. 
*/ 
private GoogleApiClient client; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    String[] consoles = getResources().getStringArray(R.array.consoles_array); 

    Arrays.asList(consoles); 

    consoleList = (ListView) findViewById(R.id.list_consoles); 
    consoleList.setAdapter(new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, consoles)); 

    getIndexList(consoles); 

    displayIndex(); 
    // ATTENTION: This was auto-generated to implement the App Indexing API. 
    // See https://g.co/AppIndexing/AndroidStudio for more information. 
    client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build(); 
} 

private void getIndexList(String[] consoles) { 
    mapIndex = new LinkedHashMap<String, Integer>(); 
    for (int i = 0; i < consoles.length; i++) { 
     String console = consoles[i]; 
     String index = console.substring(0, 1); 

     if (mapIndex.get(index) == null) 
      mapIndex.put(index, i); 
    } 
} 

private void displayIndex() { 
    LinearLayout indexLayout = (LinearLayout) findViewById(R.id.side_index); 

    TextView textView; 
    List<String> indexList = new ArrayList<String>(mapIndex.keySet()); 
    for (String index : indexList) { 
     textView = (TextView) getLayoutInflater().inflate(
       R.layout.side_index_item, null); 
     textView.setText(index); 
     textView.setOnClickListener(this); 
     indexLayout.addView(textView); 
    } 
} 

public void onClick(View view) { 
    TextView selectedIndex = (TextView) view; 
    consoleList.setSelection(mapIndex.get(selectedIndex.getText())); 
} 


@Override 
public void onStart() { 
    super.onStart(); 

    // ATTENTION: This was auto-generated to implement the App Indexing API. 
    // See https://g.co/AppIndexing/AndroidStudio for more information. 
    client.connect(); 
    Action viewAction = Action.newAction(
      Action.TYPE_VIEW, // TODO: choose an action type. 
      "Main Page", // TODO: Define a title for the content shown. 
      // TODO: If you have web page content that matches this app activity's content, 
      // make sure this auto-generated web page URL is correct. 
      // Otherwise, set the URL to null. 
      Uri.parse("http://host/path"), 
      // TODO: Make sure this auto-generated app deep link URI is correct. 
      Uri.parse("android-app://com.tylerfrisbee.gamerguide/http/host/path") 
    ); 
    AppIndex.AppIndexApi.start(client, viewAction); 
} 

@Override 
public void onStop() { 
    super.onStop(); 

    // ATTENTION: This was auto-generated to implement the App Indexing API. 
    // See https://g.co/AppIndexing/AndroidStudio for more information. 
    Action viewAction = Action.newAction(
      Action.TYPE_VIEW, // TODO: choose an action type. 
      "Main Page", // TODO: Define a title for the content shown. 
      // TODO: If you have web page content that matches this app activity's content, 
      // make sure this auto-generated web page URL is correct. 
      // Otherwise, set the URL to null. 
      Uri.parse("http://host/path"), 
      // TODO: Make sure this auto-generated app deep link URI is correct. 
      Uri.parse("android-app://com.tylerfrisbee.gamerguide/http/host/path") 
    ); 
    AppIndex.AppIndexApi.end(client, viewAction); 
    client.disconnect(); 
} 

}

+1

Где находится ваш код для ['OnItemClickListener'] (http://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html)? –

+0

См. Http://www.stackoverflow.com/a/18405437/2308683 –

+0

как cricket_007 сказал, что вы должны сделать это onItemClickListener – karimkhan

ответ

1

Вы можете позвонить setOnItemClickListener на ListView:

consoleList.setOnItemClickListener(new AdapterView.OnItemClickListener(){ 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id){ 
    //do whatever you want to do if you want to start a new Activity: 
    Intent intent = new Intent(MainActivity.this, MyActivity.class); 
    startActivity(intent); 
    } 
}); 

Это должно заполнить метод onItemClick как только вы нажмете на пункт в ListView, и это должно вызывать ваш метод onClick, если это то, что вы хотите сделать.

+0

Я не думаю, что 'onClick (view)' должен вызываться. Это вызовет исключение ClassCastException, если «ListView» имеет любое другое представление, чем «TextView» –

+0

О, это верно. Я отредактирую соответствующий ответ. Спасибо. – GamerGurke15

+0

Возможно, я ошибаюсь в этом вопросе, но 'getContext()' должен быть 'MainActivity.this', поскольку он находится в пределах анонимного класса, а' getContext() 'не является методом внутри' AdapterView.OnItemClickListener' –

Смежные вопросы