使用Android中的不同按钮打开不同的网页

时间:2013-07-26 15:18:28

标签: android button web

我在Activity中有很多按钮并单击它们我需要打开不同的网页,其URL存放在ArrayList集合中。我想使用循环,但我得到一个“不能引用在不同方法中定义的内部类中的非final变量”。

public class MainActivity extends Activity {

  public List<String> links = new ArrayList<String>();
  public static final int NRBUTTONS = 7;
  ..........................        
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    ..........
    ..........  
    int id = R.id.button1 - 1;
    for (int index=0; index<NRBUTTONS; index++) {

   Button b = (Button) findViewById(++id);
   String text = titles.get(index);
   b.setText(text);

   b.setOnClickListener(new OnClickListener() {

     @Override
     public void onClick(View arg0) {
    Intent browserIntent = new Intent (Intent.ACTION_VIEW,   
                    Uri.parse(links.get(index)));
    startActivity(browserIntent);
     }
  });
   }
   ...........
}

另外,如果你能帮助我,请

Button b = (Button) findViewById(R.id.button1);
Button b = (Button) findViewById(R.id.button2);
Button b = (Button) findViewById(R.id.button3);
Button b = (Button) findViewById(R.id.button4);

我怎么能在循环中写这个?

1 个答案:

答案 0 :(得分:1)

我只是简单介绍一下我在做这类事情时经常使用的模式:

private static final int[] buttonIds = {R.id.button1, R.id.button2, R.id.button3, R.id.button4 };

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.start_layout);

    for (int i=0; i<buttonIds.length; i++) {
        Button b = (Button) findViewById( buttonIds[i] );
        if( b != null ) {
            // Assign onClickListener, etc.
        } else {
            // Log This; shouldn't happen
        }
    }

    ....
}

以及通用onClick

的示例
@Override
public void onClick(View v) {
    switch( v.getTag() ) {
        case R.id.Button1:
            /// Do something for Button1
            break;
        case R.id.Button2:
            /// Do something for Button2
            break;
        case R.id.Button3:
            /// Do something for Button3
            break;
        case R.id.Button4:
            /// Do something for Button4
            break;
        default:
            /// Log this; shouldn't happen
    }
}

此外,您还可以快速了解一些令您头疼的问题:如果您按照以下方式声明Activity课程:

public class MainActivity extends Activity implements OnClickListener {

那么你的onClick()回调可以只是Activity类的一个方法。然后,这将您的作业简化为:

b.setOnClickListener( this );

我个人更喜欢为各种按钮创建单独的回调,因为它可以保持一切井井有条。其他程序员有不同的偏好,他们没有更好或更差,IMO。