【问题标题】:How to open different Activities with my listView items?如何使用我的 listView 项目打开不同的活动?
【发布时间】:2015-05-14 10:13:24
【问题描述】:

我有一个包含 9 个不同字符串的字符串数组,并用这个字符串创建了一个 listView;现在,当我单击 listView 的每个元素时,我想打开一个不同的 Activity。我已经试过了

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

但它只会为所有项目打开相同的活动。如果您能给我一个工作代码,那就太好了,因为我已经尝试过解决这个问题。

主活动:

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

【问题讨论】:

    标签: java android listview


    【解决方案1】:

    你可以根据位置传递给不同的activity。

    row.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
    
             Switch(position){
    
    
             case 0:
                  //startActivity 1
                  break;
             case 1:
                  //startActivity 2
                  break;
    
             /**** continue **********/
             }
    
        }
    });
    

    【讨论】:

      【解决方案2】:

      ==>在你的 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;
      
      
      
      
      
       }
      
         }
       }
      

      【讨论】:

      • 非常感谢,它运行良好,但我替换了“startActivity(new Intent((Activity) context, I.class));”到“startActivity(new Intent(MainActivity.this, A.class));”,就像在@SilentKnight 的回答中一样:)
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        通过覆盖onItemClickOnItemClickListener 来通过position 选择目标类:

                @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 的映射。

        【讨论】:

          猜你喜欢
          • 2021-08-18
          • 1970-01-01
          • 1970-01-01
          • 2018-04-13
          • 1970-01-01
          • 1970-01-01
          • 2023-04-05
          • 2015-01-24
          • 1970-01-01
          相关资源
          最近更新 更多