Android 查看未收到的点击

Android 查看未收到的点击,android,Android,我正在动态创建RelativeLayouts并将其添加到另一个布局中。我希望能够从我正在创建的这些布局中捕获单击事件。我已经做了一个测试,但似乎无法让它工作 以下是创建布局的活动: public class StatusActivity extends Activity implements OnClickListener { private ArrayList<AvatarItem> _buttonList = new ArrayList<AvatarItem>

我正在动态创建RelativeLayouts并将其添加到另一个布局中。我希望能够从我正在创建的这些布局中捕获单击事件。我已经做了一个测试,但似乎无法让它工作

以下是创建布局的活动:

public class StatusActivity extends Activity implements OnClickListener
{
    private ArrayList<AvatarItem> _buttonList = new ArrayList<AvatarItem>();
    private TweeterMe _app;
    private Twitter _twitter;
    private RelativeLayout _tweetViewer;
    private TextView _tweetField;
    private ArrayList<Status>_statii;

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        _app = (TweeterMe)getApplication();
        _twitter = _app.getTwitter();
        setContentView(R.layout.main);

        _tweetViewer = (RelativeLayout) findViewById(R.id.tweet_view);
        _tweetField = (TextView) findViewById(R.id.tweet_text_view);
        _tweetViewer.setVisibility(View.INVISIBLE);

        _tweetViewer.setOnClickListener(new OnClickListener()
        {

            public void onClick(View v)
            {
                _tweetViewer.setVisibility(View.INVISIBLE); 
            }
        });

    }

    @Override
    protected void onResume()
    {
        super.onResume();
        if (!_app.isAuthorized())
        {
            authorize();
        }
        else
        {
            loadTweets();
        }
    }

    private void loadTweets()
    {
        try
        {
            _statii = _twitter.getHomeTimeline();

            RelativeLayout layout = (RelativeLayout)findViewById(R.id.main_view);
            Display display = getWindowManager().getDefaultDisplay();
            Point middle = new Point(display.getWidth() / 2, display.getHeight() / 2);

            for (Status s : _statii)
            {
                AvatarItem ai = new AvatarItem(this, null);
                _buttonList.add(ai);
                ai.setStatus(s);
                ai.setLocation((int)(Math.random() * (display.getWidth() - 100)), (int)(Math.random() * (display.getHeight() - 150)), 500, middle);
                layout.addView(ai);
                ai.setOnClickListener(this);
            }
        }
        catch(TwitterException e)
        {

        }

    }

    private void authorize()
    {
        Intent intent = new Intent(this, AuthorizeActivity.class);
        startActivity(intent);
    }

    public void onClick(View v)
    {
        Log.d("TEST", "NOT WORKING");
    }

}
公共类StatusActivity扩展活动实现OnClickListener
{
私有ArrayList_buttonList=新ArrayList();
私人推特应用程序;
私人推特;
私人RelativeLayout_tweetViewer;
私有文本视图tweetField;
私人ArrayList_statii;
@凌驾
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
_app=(TweeterMe)getApplication();
_twitter=_app.getTwitter();
setContentView(R.layout.main);
_tweetViewer=(RelativeLayout)findViewById(R.id.tweet_视图);
_tweetField=(TextView)findViewById(R.id.tweet\u text\u view);
_tweetViewer.setVisibility(View.INVISIBLE);
_setOnClickListener(新的OnClickListener()
{
公共void onClick(视图v)
{
_tweetViewer.setVisibility(View.INVISIBLE);
}
});
}
@凌驾
受保护的void onResume()
{
super.onResume();
如果(!\u app.isAuthorized())
{
授权();
}
其他的
{
loadTweets();
}
}
私有void loadTweets()
{
尝试
{
_statii=_twitter.getHomeTimeline();
RelativeLayout布局=(RelativeLayout)findViewById(R.id.main\u视图);
Display Display=getWindowManager().getDefaultDisplay();
中点=新点(display.getWidth()/2,display.getHeight()/2);
对于(状态s:_statii)
{
AvatarItem ai=新的AvatarItem(此为空);
_按钮列表。添加(ai);
ai.设定状态(s);
ai.setLocation((int)(Math.random()*(display.getWidth()-100)),(int)(Math.random()*(display.getHeight()-150)),500,中间);
布局。添加视图(ai);
ai.setOnClickListener(本);
}
}
捕获(twitter异常)
{
}
}
私人授权
{
意向意向=新意向(此,AuthorizeActivity.class);
星触觉(意向);
}
公共void onClick(视图v)
{
日志d(“测试”,“不工作”);
}
}
以下是我正在创建的布局:

public class AvatarItem extends RelativeLayout implements LoadImageAsyncTaskResponder
{

private Status _status;
private ImageButton _avatar;
private AsyncTask<URL, Void, Drawable> _imageLoadTask;
private TranslateAnimation _anim;

public AvatarItem(Context context, AttributeSet attrs)
{
    super(context, attrs);
    setVisibility(View.INVISIBLE);
    _avatar = new ImageButton(getContext());
    addView(_avatar);
}

public void setStatus(Status status)
{
    _status = status;
    final User user = status.getUser();

    if (_imageLoadTask != null)
    {
        _imageLoadTask.cancel(true);
    }

    _imageLoadTask = new LoadImageAsyncTask(this).execute(user.getProfileImageURL());
}

public void setLocation(int x, int y, int duration, Point middle)
{
    _anim = new TranslateAnimation(middle.x, x, middle.y, y);
    _anim.setDuration(duration);
    _anim.setFillEnabled(true);
    _anim.setFillAfter(true);
}

public Status getStatus()
{
    return _status;
}

public ImageButton getButton()
{
    return _avatar;
}

public void imageLoadCancelled()
{
    // Don't care right now
}

public void imageLoaded(Drawable drawable)
{
    setVisibility(View.VISIBLE);
    _avatar.setImageDrawable(drawable);
    startAnimation(_anim);
}

public void imageLoading()
{
    _avatar.setImageDrawable(null);     
}
公共类AvatarItem扩展了RelativeLayout实现LoadImageAsyncTaskResponder
{
私人身份(u身份),;
私人图像按钮(avatar),;
私有异步任务\u imageLoadTask;
私人翻译动画;
公共化身(上下文、属性集属性)
{
超级(上下文,attrs);
设置可见性(视图不可见);
_avatar=新图像按钮(getContext());
addView(_化身);
}
公共无效设置状态(状态)
{
_状态=状态;
最终用户=status.getUser();
如果(_imageLoadTask!=null)
{
_imageLoadTask.cancel(true);
}
_imageLoadTask=新建LoadImageAsyncTask(this).execute(user.getProfileImageURL());
}
公共无效设置位置(整数x、整数y、整数持续时间、中点)
{
_anim=新的翻译图像(middle.x,x,middle.y,y);
_动画设置持续时间(持续时间);
_anim.setFillEnabled(真);
_anim.setFillAfter(真);
}
公共状态getStatus()
{
返回状态;
}
公共图像按钮getButton()
{
返回化身;
}
公共void imageLoadCancelled()
{
//我现在不在乎
}
已加载的公共void图像(可绘制)
{
设置可见性(View.VISIBLE);
_可设置图像绘制(可绘制);
startAnimation(_anim);
}
公共无效映像加载()
{
_可设置图像绘制(空);
}
}

以下是布局xml文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <RelativeLayout 
        android:id="@+id/main_view"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>
    <RelativeLayout
        android:id="@+id/tweet_view"
        android:layout_width="fill_parent"
        android:layout_margin="50px"
        android:layout_height="150px"
        android:background="#c5c5c5"
        android:layout_centerInParent="true">
        <TextView 
            android:id="@+id/tweet_text_view"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"/>
    </RelativeLayout>
</RelativeLayout>


有什么想法吗


谢谢

我认为您需要覆盖onclick。至少这是我在其他例子中看到的。确保没有其他地方的onclick窃取了事件

看起来tweet_视图只设置为不可见?