简体   繁体   中英

Launch a new activity from ListView

So I set up a list view which populates itself from an array of strings in the strings.xml file, and I can't seem to figure out how to code it so that tapping/clicking on one of the options in the list starts a new activity. I know that topics for this exist already, but it seems that I'm setting up my listview differently so the solutions presented aren't compatible. Here's my mainactivity.java code:

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();
}

}

You can call setOnItemClickListener on the 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);
  }
});

This should populate the onItemClick method as soon as you click on the item in the ListView and this should call your onClick method if this is what you want to do.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM