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