【问题标题】:how to add different activity for each row in listview in android如何在android的listview中为每一行添加不同的活动
【发布时间】:2016-06-28 11:17:28
【问题描述】:

我知道如何使用意图将活动添加到列表视图,您可以在下面的代码中看到我使用 customadapter.java 文件将 back.class 添加到我的 mainactivity.java 中。 但是,当我每次单击列表视图的每一行时,它只打开一个活动(back.class)。现在我想使用意图向我的 mainactivity.java 添加不同的活动(leg.class、abs.class、chest.class 等)所以当您单击列表视图的每一行时,它将打开不同的活动。不知道怎么弄?

这是我的 mainactitvity.java 文件

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        String[] excercise = {"Back DAY", "Legs DAY", "Abs DAY", "Chest DAY", "Shoulder DAY", "Arms DAY"};
        final int[] imgs = {R.drawable.back, R.drawable.leg, R.drawable.abs, R.drawable.chest, R.drawable.shoulder, R.drawable.arms};
        ListAdapter saruadapter = new customadapter(this, excercise, imgs);
        ListView sarulistview = (ListView) findViewById(R.id.sarelistview);
        sarulistview.setAdapter(saruadapter);

       // Intent intent = new Intent();
       // startService(intent);


        sarulistview.setOnItemClickListener(
                new android.widget.AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                      //  String excercise = String.valueOf(parent.getItemAtPosition(position));
                       // Toast.makeText(MainActivity.this, excercise, Toast.LENGTH_LONG).show();
                        Intent i = new Intent(MainActivity.this, back.class);
                        startActivity(i);
                    }
                }
        );
    }
}

这是我的 customadapter.java 文件

public class customadapter extends ArrayAdapter<String>{
    private int[] imgs;
    public customadapter(Context context, String[] excercise, int[] imgs) {
        super(context, R.layout.custom_row, excercise);
        this.imgs = imgs;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater saruinflator = LayoutInflater.from(getContext());
        View coustomView = saruinflator.inflate(R.layout.custom_row, parent, false);

        String excerciseitem = getItem(position);
        TextView saruview = (TextView) coustomView.findViewById(R.id.sareview);
        ImageView saruimg = (ImageView) coustomView.findViewById(R.id.sareimage);

        saruview.setText(excerciseitem);
        saruimg.setImageResource(imgs[position]);
        return coustomView;
    }
}

这是我的 back.java 文件

public class back extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bacon2);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        Bundle back = getIntent().getExtras();

        if(back == null)
        {
            return;
        }
    }
}

【问题讨论】:

    标签: java android listview android-intent


    【解决方案1】:

    使用 Switch Condition 并使用 Position 打开新 Activity。

      sarulistview.setOnItemClickListener(
            new android.widget.AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                  //  String excercise = String.valueOf(parent.getItemAtPosition(position));
                   // Toast.makeText(MainActivity.this, excercise, Toast.LENGTH_LONG).show();
           switch (position) {
    
            case 0:
                Intent i0 = new Intent(MainActivity.this, back.class);
                startActivity(i0);
    
                break;
            case 1:
                Intent i1 = new Intent(MainActivity.this, leg.class);
                startActivity(i1);
                break;
            case 2:
                Intent i2 = new Intent(MainActivity.this, abs.class);
                startActivity(i2);
                break;
            case 3:
                Intent i3 = new Intent(MainActivity.this, chest.class);
                startActivity(i3);
                break;
    
        }
                }
            }
    );
    

    【讨论】:

      【解决方案2】:

      当您将 onItemClick 设置为您的 ListView 时,您将获得被点击项目的位置。因此,您需要根据需要打开不同的活动进行某种类型的检查。一种可能的检查可以使用 position。例如:-

           sarulistview.setOnItemClickListener(
                  new android.widget.AdapterView.OnItemClickListener() {
                      @Override
                      public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                          //  String excercise = String.valueOf(parent.getItemAtPosition(position));
                          // Toast.makeText(MainActivity.this, excercise, Toast.LENGTH_LONG).show();
                          if (position == 1) {
                              Intent i0 = new Intent(MainActivity.this, back.class);
                              startActivity(i0);
                          }
                          else if(position == 2){
                              Intent i1 = new Intent(MainActivity.this, chess.class);
                              startActivity(i1);
                          }else {
                              Intent i2 = new Intent(MainActivity.this, abc.class);
                              startActivity(i2); 
                          }
                      }
                  }
          );
      

      这只是一个示例方法。业务逻辑将取决于您的需要。

      【讨论】:

      • Switch 优于 if else if 语句。可以做研发。Read here
      • @Avinash8989 switch 语句并不总是比 if 语句快。它比长长的 if-else 语句列表更好地扩展,因为 switch 可以基于所有值执行查找。但是,对于短期情况,它不会更快,可能会更慢。
      • 可能是,但两者的性能几乎相同。两者都很好。谢谢纠正我。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-29
      • 2011-08-12
      • 1970-01-01
      • 2018-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多