onClick在OnCreate中不工作

时间:2014-01-16 18:00:52

标签: android button onclick

所以我在布局中有2个按钮

像这样:

    <LinearLayout android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:onClick="onClick">

<Button
    android:id="@+id/btnEdit"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:text="Edit Spot" />
<Button android:id="@+id/btnGo" 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Google Spot"
    android:layout_weight="1"/>     
</LinearLayout>

然后在onCreate中为此活动我有:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.view_spot);

    // save button
    ButtonEdit = (Button)findViewById(R.id.btnEdit);
    ButtonGo = (Button) findViewById(R.id.btnGo);

    // getting product details from intent
    Intent i = getIntent();

    // getting product id (pid) from intent
    pid = i.getStringExtra(TAG_PID);

    // Getting complete product details in background thread
    new GetProductDetails().execute();

    // save button click event
    ButtonEdit.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            Toast.makeText(getApplicationContext(), "Edit button pressed", Toast.LENGTH_LONG).show(); 
        }
    });

    // Go button click event
    ButtonGo.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            Toast.makeText(getApplicationContext(), "Go button pressed!", Toast.LENGTH_LONG).show();
        }
    });
}

但由于某些原因,当我点击按钮时没有任何反应。我环顾四周,其他人问这个问题并尝试了但仍然没有。有人可以帮我弄清楚它为什么不起作用吗?

谢谢你, 泰勒

3 个答案:

答案 0 :(得分:1)

您必须在onClick的定义中添加Button属性,而不是LinearLayout

即使您想重复使用名为onClick的相同方法,也可以为每个按钮设置一个标记,并为每个标记执行switch。例如:

在你的布局中:

android:tag="1"

在您的代码中:

public void onClick(View v) {
  String tag = (String) v.getTag();

  switch (Integer.parseInt(tag)) {
    case 1:  // First button
      ... 
      break;

    case 2:  // Second button
      ...
      break;
  }
}

答案 1 :(得分:1)

onClick删除LinearLayout。现在你已经嵌套了onClickListeners。 LinearLayout正在拦截事件,可能不会将其传递下去。

编辑:出于某种原因,有人盲目地低估了所有这些答案。发表评论解释为什么这是错误的。

答案 2 :(得分:0)

请点击Button(s)

<LinearLayout android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:onClick="onClick">

<Button
android:id="@+id/btnEdit"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Edit Spot"
android:clickable:true />

<Button android:id="@+id/btnGo" 
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Google Spot"
android:layout_weight="1"
android:clickable:true/>     
</LinearLayout>

同时在onClick()

中实施Activity方法
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view_spot);

// save button
ButtonEdit = (Button)findViewById(R.id.btnEdit);
ButtonGo = (Button) findViewById(R.id.btnGo);

// getting product details from intent
Intent i = getIntent();

// getting product id (pid) from intent
pid = i.getStringExtra(TAG_PID);

// Getting complete product details in background thread
new GetProductDetails().execute();

// save button click event
ButtonEdit.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View arg0) {
        Toast.makeText(getApplicationContext(), "Edit button pressed", Toast.LENGTH_LONG).show(); 
    }
});

// Go button click event
ButtonGo.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View arg0) {
        Toast.makeText(getApplicationContext(), "Go button pressed!", Toast.LENGTH_LONG).show();
    }
});
} 

public void onCLick(View v)
{
  //Your Implementation
}

我希望这会有所帮助。