【问题标题】:ListView OnItemClick to Other ActivityListView OnItemClick 到其他活动
【发布时间】:2023-04-11 02:11:01
【问题描述】:

首先,我是安卓应用程序编程的新手,所以我想你可以称我为菜鸟。我什么都试过了。我在谷歌上搜索了 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 个列表项:“即将推出、刚刚发布、精选”链接到另一个活动。 有没有办法完成这个?

【问题讨论】:

    标签: android listview android-listview onitemclicklistener


    【解决方案1】:

    我不清楚你到底想要什么。但是,要响应列表项点击,您需要设置 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)。

    【讨论】:

    • 你坚持哪一部分?你的问题很模糊。
    • 我一直在制作 OnItemClickListener。它根本行不通..我希望每个项目都去其他活动
    • 您是否尝试使用我上面发布的代码?有多少有效;你到底卡在哪里了?
    猜你喜欢
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-24
    • 1970-01-01
    相关资源
    最近更新 更多