-1

我现在正在学习 Android 并在列表视图上工作以显示列表的多个项目。这可能是个愚蠢的问题,但我必须要求找出幕后的原因(如果有的话)

以下是将数据填充到列表视图的 2 种方法

方式1

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ListView    moblieListView                      =   getListView();
    MobileListAdapter   mobileListAdapter           =   new MobileListAdapter(getApplicationContext(), mobileList);
    moblieListView.setAdapter(mobileListAdapter);

    moblieListView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            String selectedValue = (String)parent.getItemAtPosition(position);
            Toast.makeText(getApplicationContext(), selectedValue, Toast.LENGTH_SHORT).show();

        }       
    }); 
}

方式2

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    MobileListAdapter   mobileListAdapter           =   new MobileListAdapter(getApplicationContext(), mobileList);
    setListAdapter(mobileListAdapter);

}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);

    String str = l.getItemAtPosition(position).toString();
    Toast.makeText(MobileActivity.this, str, Toast.LENGTH_SHORT).show();
}

我现在看到的way1是有一个对象ListView,但是way2。另一点onItemClick位于 in onCreate,然而,onItemClick 与inway1分开。onCreateway2

问题当我们应该使用way1 而不是way2 或反之亦然时,是否有任何特殊原因。如果您对这些有任何想法,请提供帮助。

4

1 回答 1

1

两者都很好,人们使用这两种方法。

但是,我更喜欢第一种方法。

原因:

  1. 你最终不会得到一个实现这么多接口的类。

  2. 如果有多个视图(如 onClickListener),您不必检查哪个视图是导致事件的视图。

  3. 您将停留在您编写的有关要处理的视图的同一区域中,从而使上下滚动变得不那么烦人。

  4. 这更有意义,因为活动不是能够点击某个项目的活动,而是支持它的 listView。

  5. 您确切地知道哪个视图附加到哪个侦听器。

  6. 在有多个视图的情况下减少混乱(如果你有 2 个 listViews 你会怎么做?)。

  7. 对于第二种方法,xml 中支持的方法很少。对于视图,我只熟悉 onClick 。所以第二种方法无论如何都失去了重点。

于 2013-04-17T20:33:28.957 回答