2013-11-30 1 views
1

Для начала я новичок в программировании приложений для Android, поэтому, я думаю, вы можете называть меня noob. Я все пробовал. Я искал, как 100 страниц в Google. Но я просто не могу понять, как это сделать.ListView OnItemНажмите Другие действия

Моя проблема в том, что я не могу связать определенный элемент из списка с другим видом деятельности. Я пробовал много онлайн-уроков, но я не могу заставить его работать. Также потому, что я не могу расширить 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 идентификатор left_drawer

Как вы видите, я хочу, 3 пункты списка: "Coming Up, Просто выхода, Рекомендуемые" быть связаны с другой деятельностью. Есть ли все равно, чтобы это сделать?

ответ

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 в приведенном выше примере).

+0

В какой части вы застряли? Вы оставили свой вопрос довольно расплывчатым. –

+0

Я застрял в создании OnItemClickListener. Это просто не сработает. Я хочу, чтобы каждый товар перешел на другую деятельность. – user3052132

+0

Пробовал ли вы использовать код, который я разместил выше? Сколько из них работает; где именно вы застряли? –