OnClick不适用于LinearLayout

时间:2013-11-25 10:56:03

标签: java android xml

OnClick不起作用。点击布局后没有任何反应。它似乎是可点击的,因为布局会改变其颜色,但新的布局不会打开。

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/window"
     android:layout_width="295dp"
     android:layout_height="wrap_content"
     android:orientation="vertical" 
     android:background="@drawable/editborder"
     android:clickable="true"
     android:onClick="openBigImage">

以下是主要活动的更多代码:

 public class MyMapActivity extends FragmentActivity implements LocationListener
 {

     private Marker marker;
     private Hashtable<String, String> markers;
     private ImageLoader imageLoader;
     private DisplayImageOptions options;
     private GoogleMap map;
     private ListView mainListView ;  
     private ArrayAdapter<String> listAdapter ;




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

    // Look up the AdView as a resource and load a request.
    //AdView adView = (AdView)this.findViewById(R.id.adView);
    //adView.loadAd(new AdRequest());


    // Getting Google Play availability status
    int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getBaseContext());

    // Showing status
    if(status!=ConnectionResult.SUCCESS)
    { // Google Play Services are not available
        int requestCode = 10;
        Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, requestCode);
        dialog.show();

    }
    else 
    {// Google Play Services are available
        // Getting reference to the SupportMapFragment of activity_main.xml
        SupportMapFragment mapFragment = (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);

        if (savedInstanceState == null) {
            // First incarnation of this activity.
            mapFragment.setRetainInstance(true);
        } 
        else 
        {
            // Reincarnated activity. The obtained map is the same map instance in the previous
            // activity life cycle. There is no need to reinitialize it.
            map = mapFragment.getMap();
        }

        setUpMapIfNeeded();
    }
 }

 @Override
 protected void onResume() 
 {
      super.onResume();
      setUpMapIfNeeded();
 }


 public void openBigImage(View v)
     {
        setContentView(R.layout.bigpicture);
     }

bigpicture.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"       
    android:id="@+id/bigpicture"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000000"
    android:orientation="vertical">

<fragment
    android:id="@+id/minimap"
    android:layout_width="200px"
    android:layout_height="200px"
    android:layout_alignParentRight="true"
    android:layout_alignParentBottom="true"
    class="com.google.android.gms.maps.SupportMapFragment" />

 <ImageView
    android:id="@+id/badge"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp"
    android:adjustViewBounds="true" />
 </RelativeLayout> 

在其他情况下多次调用setContentView(),如菜单项“about”,“settings”等。 试着没有setContentView。我已经将新布局放到main.xml中并使可见性变为GONE。 OnClick方法应该将可见性更改为可见,但同样没有任何反应。 Logcat说“11-25 13:47:28.638:D / GestureDetector(3156):[Surface Touch事件] mSweepDown False,mLRSDCnt:-1 mTouchCnt:2 mFalseSizeCnt:0”当我点击线性布局时。

3 个答案:

答案 0 :(得分:0)

保罗 有一点是使用/&gt;关闭线性布局。我假设您已经按照地图教程link进行了操作,并传递了所有清单权限和其他要求。您可能有一些理由使用px。检查是否正在创建地图。还要为徽章图像提供一些高度和背景颜色,看看是否有事情发生。

我在没有地图片段的情况下测试了你的代码,它运行正常。 你可以发布错误日志吗?

答案 1 :(得分:0)

实测值。点击InfoWindow,我们应该实现onInfoWindowClick。 但首先我们必须添加map.setOnInfoWindowClickListener(this);在主要活动中。主要活动必须实现OnInfoWindowClickListener。 我已经将新的LinearLayout添加到main.xml中,使其不可见。 这是onInfoWindowClick的代码:

 @Override
public void onInfoWindowClick(Marker marker) {
    LinearLayout secondLL = (LinearLayout) findViewById(R.id.bigpicture);
    int visibility = secondLL.getVisibility();
    if(visibility == View.GONE)
    {
         secondLL.setVisibility(View.VISIBLE);
    }

}

答案 2 :(得分:-1)

我认为你不能使用onClick属性。 你必须像这样使用setOnClickListener():

LinearLayout layout = (LinearLayout )findViewById(R.id.window);
layout .setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        YourActivity.this.setContentView(R.layout.bigpicture);
    }
});