ListView OnItemClick到其他活动

时间:2013-11-30 13:08:52

标签: android listview android-listview onitemclicklistener

首先,我是Android应用程序编程的新手,所以我想你可以称我为菜鸟。我尝试了一切。我在谷歌搜索了100页。但我只是无法弄清楚如何做到这一点。

我的问题是,我无法将列表视图中的某个项目与另一个活动相关联。我尝试了很多在线教程,但我无法使其工作。另外因为我无法将MainActivity扩展到ListActivity。

如果有人可以告诉我如何做到这一点,或者解释另一种选择,我会非常高兴。

package com.******.*****;

import java.io.FileNotFoundException;

import com.******.******.R;
import com.******.******.MainActivity;


import android.app.ActionBar;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;

public class MainActivity extends Activity {

private SitesAdapter mAdapter;
private ListView sitesList;
private Button mRefresh1;
private String[] drawerListViewItems={"Coming Up","Featured","Just Released"};
    private ListView drawerListView;
    private DrawerLayout drawerLayout;
    private ActionBarDrawerToggle actionBarDrawerToggle;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.i("StackSites", "OnCreate()");
    setContentView(R.layout.activity_main);
    mRefresh1 = (Button) findViewById(R.id.button1);
    ActionBar ab = getActionBar();

    setTitle("EDMBrain");
    ab.setSubtitle("Coming up"); 

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActionBar().getThemedContext(), android.R.layout.simple_list_item_1, drawerListViewItems);

     final DrawerLayout drawer = (DrawerLayout)findViewById(R.id.drawer_layout);
     final ListView navList = (ListView) findViewById(R.id.left_drawer);
     navList.setAdapter(adapter);










    // App Icon 
    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

    actionBarDrawerToggle = new ActionBarDrawerToggle(
            this,                  /* host Activity */
            drawerLayout,         /* DrawerLayout object */
            R.drawable.ic_drawer,  /* nav drawer icon to replace 'Up' caret */
            R.string.drawer_open,  /* "open drawer" description */
            R.string.drawer_close  /* "close drawer" description */
            );

    // Set actionBarDrawerToggle as the DrawerListener
    drawerLayout.setDrawerListener(actionBarDrawerToggle);

    getActionBar().setDisplayHomeAsUpEnabled(true); 

    // just styling option add shadow the right edge of the drawer
drawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);


    mRefresh1.setOnClickListener(new OnClickListener()
    {
      public void onClick(View v)
      {
          Log.i("StackSites", "starting download Task");
            SitesDownloadTask download = new SitesDownloadTask();
            download.execute();
      }
    });

    //Get reference to our ListView
    sitesList = (ListView)findViewById(R.id.sitesList);



    //Set the click listener to launch the browser when a row is clicked.
    sitesList.setOnItemClickListener(new OnItemClickListener() {



        @Override
        public void onItemClick(AdapterView<?> parent, View v, int pos,long id) {
            String url = mAdapter.getItem(pos).getLink();
            Intent i = new Intent(Intent.ACTION_VIEW);
            i.setData(Uri.parse(url));
            startActivity(i);

        }

    });





    /*
     * If network is available download the xml from the Internet.
     * If not then try to use the local file from last time.
     */
    if(isNetworkAvailable()){
        Log.i("StackSites", "starting download Task");
        SitesDownloadTask download = new SitesDownloadTask();
        download.execute();
    }else{
        mAdapter = new SitesAdapter(getApplicationContext(), -1, SitesXmlPullParser.getStackSitesFromFile(MainActivity.this));
        sitesList.setAdapter(mAdapter);
    }

}







private ListView getListView() {
    // TODO Auto-generated method stub
    return null;
}







//Helper method to determine if Internet connection is available.
private boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager 
          = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isConnected();
} 

/*
 * AsyncTask that will download the xml file for us and store it locally.
 * After the download is done we'll parse the local file.
 */
private class SitesDownloadTask extends AsyncTask<Void, Void, Void>{

    @Override
    protected Void doInBackground(Void... arg0) {
        //Download the file
        try {
            Downloader.DownloadFromUrl("****", openFileOutput("StackSites.xml", Context.MODE_PRIVATE));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        return null;
    }

    @Override
    protected void onPostExecute(Void result){
        //setup our Adapter and set it to the ListView.
        mAdapter = new SitesAdapter(MainActivity.this, -1, SitesXmlPullParser.getStackSitesFromFile(MainActivity.this));
        sitesList.setAdapter(mAdapter);
        Log.i("StackSites", "adapter size = "+ mAdapter.getCount());
    }
}



 @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        actionBarDrawerToggle.onConfigurationChanged(newConfig);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

         // call ActionBarDrawerToggle.onOptionsItemSelected(), if it returns true
        // then it has handled the app icon touch event
        if (actionBarDrawerToggle.onOptionsItemSelected(item)) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }


}

ListView ID是left_drawer

如您所见,我希望将3个列表项:“即将发布,刚刚发布,精选”链接到另一个活动。 反正有没有这个呢?

1 个答案:

答案 0 :(得分:0)

我不清楚你到底想要什么。但是,要响应列表项单击,您需要设置OnItemClickListener。要链接到其他活动,请使用意图。这是一个示例:

public class MainActivity extends Activity {

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

    ((ListView) findViewById (R.id.list)).setOnItemClickListener (this);
  }

  public void onItemClick (AdapterView<?> parent, View view, int position, long id)
  {
    Intent intent = new Intent (this, ShowDetail.class);
    intent.putExtra (...); // info you want to pass to the ShowDetail activity
    startActivity (intent);
  }
}

并且,您需要编写第二个活动(上例中的ShowDetail)。