2015-05-14 76 views
3

我有一個字符串數組與9個不同的字符串,並創建了一個listView與此字符串;現在我想打開一個不同的Activity,當我點擊我的listView的每個元素。我已經試過如何用我的listView項目打開不同的活動?

row.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     startActivity(new Intent((Activity)context, Workouts.class)); 
    } 
}); 

但它只爲所有項目打開相同的Activity。如果你能爲我提供一個工作代碼,這將是非常好的,因爲我已經試圖解決這個問題。

MainActivity:

public class MainActivity extends Activity implements OnItemClickListener { 

    private DrawerLayout drawerLayout; 
    private ListView listView; 

    private ActionBarDrawerToggle drawerListener; 
    private MyAdapter MyAdapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState){ 

     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 
     drawerLayout=(DrawerLayout) findViewById(R.id.drawerLayout); 

     listView=(ListView)findViewById(R.id.drawerList); 
     MyAdapter=new MyAdapter(this); 
     listView.setAdapter(MyAdapter); 
     listView.setOnItemClickListener(this); 

     drawerListener= new ActionBarDrawerToggle(this, drawerLayout,  
     R.drawable.listmenu, 
     R.string.drawer_open, R.string.drawer_close){ 

      @Override 
      public void onDrawerClosed(View drawerView) { 
       // TODO Auto-generated method stub 
       super.onDrawerClosed(drawerView); 
      } 

      @Override 
      public void onDrawerOpened(View drawerView) { 
       // TODO Auto-generated method stub 
       Toast.makeText(MainActivity.this, " Drawer Opened ", 
       Toast.LENGTH_SHORT).show(); 
      } 

     }; 

     drawerLayout.setDrawerListener(drawerListener); 

     getActionBar().setHomeButtonEnabled(true); 
     getActionBar().setDisplayHomeAsUpEnabled(true); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // TODO Auto-generated method stub 

     if (drawerListener.onOptionsItemSelected(item)) 
     { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     // TODO Auto-generated method stub 
     super.onConfigurationChanged(newConfig); 

     drawerListener.onConfigurationChanged(newConfig); 
    } 


    @Override 
    protected void onPostCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onPostCreate(savedInstanceState); 
     drawerListener.syncState(); 
    } 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position,   
    long id) { 
    } 

    public void selectItem(int position) {   
     listView.setItemChecked(position, true); 
    } 

    public void setTitle(String title) 
    { 
     getActionBar().setTitle(title); 

    class MyAdapter extends BaseAdapter { 
     private Context context; 
     String[] planets; 

     int[] images = { R.drawable.home, R.drawable.workout, R.drawable.week, 
      R.drawable.gallery, R.drawable.statistics, R.drawable.settings}; 

      public MyAdapter(Context context) { 
       this.context=context; 
       planets=context.getResources().getStringArray(R.array.planets); 
      } 

      @Override 
      public int getCount() { 
       // TODO Auto-generated method stub 
       return planets.length; 
      } 

      @Override 
      public Object getItem(int position) { 
       // TODO Auto-generated method stub 
       return planets[position]; 
      } 

      @Override 
      public long getItemId(int position) { 
       // TODO Auto-generated method stub 
       return position; 
      } 

      @Override 
      public View getView(int position, View convertView, ViewGroup parent) { 
       // TODO Auto-generated method stub 

       View row =null; 

       if (convertView==null) 
       { 
        LayoutInflater inflater = (LayoutInflater)    
         context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

        row=inflater.inflate(R.layout.custom_row, parent, false); 
       } 
       else 
       { 
        row = convertView      
       } 

       row.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         startActivity(new Intent((Activity) context, Workouts.class)); 
        } 
       }); 

       TextView titleTextView = (TextView) row.findViewById(R.id.textView1); 
       ImageView titleImageView = (ImageView) row.findViewById(R.id.imageView1); 

       titleTextView.setText(planets[position]); 
       titleImageView.setImageResource(images[position]); 
       return row;  
      } 
     } 
    } 

回答

1

==>替換下面的代碼在烏爾MainActivity

public class MainActivity extends Activity implements OnItemClickListener  { 

private DrawerLayout drawerLayout; 
private ListView listView; 


private ActionBarDrawerToggle drawerListener; 
private MyAdapter MyAdapter; 




@Override 
protected void onCreate(Bundle savedInstanceState){ 


    super.onCreate(savedInstanceState); 

setContentView(R.layout.activity_main); 
drawerLayout=(DrawerLayout) findViewById(R.id.drawerLayout); 

listView=(ListView)findViewById(R.id.drawerList); 
MyAdapter=new MyAdapter(this); 
listView.setAdapter(MyAdapter); 
listView.setOnItemClickListener(this); 

    drawerListener= new ActionBarDrawerToggle(this, drawerLayout,  
    R.drawable.listmenu, 
    R.string.drawer_open, R.string.drawer_close){ 


    @Override 
    public void onDrawerClosed(View drawerView) { 
    // TODO Auto-generated method stub 
    super.onDrawerClosed(drawerView); 
} 

@Override 
     public void onDrawerOpened(View drawerView) { 
      // TODO Auto-generated method stub 
    Toast.makeText(MainActivity.this, " Drawer Opened ", 
Toast.LENGTH_SHORT).show(); 


    } 

}; 

    drawerLayout.setDrawerListener(drawerListener); 

    getActionBar().setHomeButtonEnabled(true); 
    getActionBar().setDisplayHomeAsUpEnabled(true); 
    } 

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
    // TODO Auto-generated method stub 

if(drawerListener.onOptionsItemSelected(item)) 

    { 

return true; 

    } 

return super.onOptionsItemSelected(item); 


    } 

    @Override 
public void onConfigurationChanged(Configuration newConfig) { 
    // TODO Auto-generated method stub 
super.onConfigurationChanged(newConfig); 

drawerListener.onConfigurationChanged(newConfig); 
} 


    @Override 
protected void onPostCreate(Bundle savedInstanceState) { 
// TODO Auto-generated method stub 
super.onPostCreate(savedInstanceState); 
drawerListener.syncState(); 
    } 

     @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position,   
long id) { 
if (position == 0) { 
     startActivity(new Intent((Activity) context, A.class)); 
    } 
    if (position == 1) { 
     startActivity(new Intent((Activity) context, B.class)); 
    } 
    if (position == 2) { 
     startActivity(new Intent((Activity) context, C.class)); 
    } 
    if (position == 3) { 
     startActivity(new Intent((Activity) context, D.class)); 
    } 
    if (position == 4) { 
     startActivity(new Intent((Activity) context, E.class)); 
    } 
    if (position == 5) { 
     startActivity(new Intent((Activity) context, F.class)); 
    } 
    if (position == 6) { 
     startActivity(new Intent((Activity) context, G.class)); 
    } 
    if (position == 7) { 
     startActivity(new Intent((Activity) context, H.class)); 
    } 
    if (position == 8) { 
     startActivity(new Intent((Activity) context, I.class)); 
    } 


     } 
public void selectItem(int position) { 

listView.setItemChecked(position, true); 

} 

public void setTitle(String title) 
{ 
getActionBar().setTitle(title); 
} 

class MyAdapter extends BaseAdapter { 
private Context context; 
String[] planets; 

int[] images = { R.drawable.home, R.drawable.workout, R.drawable.week, 
    R.drawable.gallery, R.drawable.statistics, R.drawable.settings}; 






public MyAdapter(Context context) { 
this.context=context; 
    planets=context.getResources().getStringArray(R.array.planets); 
    } 

@Override 
    public int getCount() { 
    // TODO Auto-generated method stub 
return planets.length; 
} 






@Override 
public Object getItem(int position) { 
// TODO Auto-generated method stub 
    return planets[position]; 
    } 

@Override 

public long getItemId(int position) { 
// TODO Auto-generated method stub 
return position; 
} 

    @Override 
public View getView(int position, View convertView, ViewGroup parent) { 
// TODO Auto-generated method stub 

View row =null; 

if(convertView==null) 
{ 
    LayoutInflater inflater=(LayoutInflater)    
    context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    row=inflater.inflate(R.layout.custom_row, parent, false); 
} 

else 
{ 
    row=convertView; 

} 








TextView titleTextView=(TextView) row.findViewById(R.id.textView1); 
    ImageView titleImageView= (ImageView) row.findViewById(R.id.imageView1); 


titleTextView.setText(planets[position]); 
titleImageView.setImageResource(images[position]); 
return row; 





} 

    } 
} 
+0

非常感謝,它工作完美,但我取代了「startActivity(新意圖((活動)上下文,I.class));」到「startActivity(new Intent(MainActivity.this,A.class));」,就像@SilentKnight的回答:) – ThanksForHelp

2

您可以根據位置傳遞給不同的活動。

row.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 

     Switch(position){ 


     case 0: 
       //startActivity 1 
       break; 
     case 1: 
       //startActivity 2 
       break; 

     /**** continue **********/ 
     } 

    } 
}); 
1

MainActivity刪除您的OnItemClickListener實施和使用匿名類來代替。更換listView.setOnItemClickListener(this);這個:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, 
          int position, long id) { 
    switch (position) { 
    case 0: 
     startActivity(new Intent((Activity) context, Activity0.class)); 
     break; 
    case 1: 
     startActivity(new Intent((Activity) context, Activity1.class)); 
     break; 
    case 2: 
     startActivity(new Intent((Activity) context, Activity2.class)); 
     break; 
    // etc. 
    } 
}); 
1

通過position選擇目標類通過重寫你的OnItemClickListeneronItemClick

 @Override 
     public void onItemClick(View view, int position) { 
      switch(position){ 
      case 0: 
       startActivity(new Intent(MainActivity.this, A.class)); 
       break; 
      case 1: 
       startActivity(new Intent(MainActivity.this, B.class)); 
       break; 
      default: 
       break; 
      } 
     } 

更重要的是,你必須定義的映射從positiontarget class

相關問題