Java 如何从活动调用方法来更改布局?
如何调用活动的Java 如何从活动调用方法来更改布局?,java,android,Java,Android,如何调用活动的onimclick事件中VideoLayout的changetTitle()方法 我试图找出更改列表项内容的最佳做法 做v.changetTitle((VideoModel)videoAdapter.getItem(position.title)(我认为这是我想到的第一个解决方案)抛出了一个“未定义方法”错误 有问题吗 我不会解释代码,因为我认为它是不言自明的: 活动: public class MainActivity extends BaseActivity { p
onimclick
事件中VideoLayout
的changetTitle()
方法
我试图找出更改列表项内容的最佳做法
做v.changetTitle((VideoModel)videoAdapter.getItem(position.title)代码>(我认为这是我想到的第一个解决方案)抛出了一个“未定义方法”错误
有问题吗
我不会解释代码,因为我认为它是不言自明的:
活动:
public class MainActivity extends BaseActivity {
public void setVideosList()
{
videoAdapter = new VideoAdapter(this, videoItems);
listView.setAdapter(videoAdapter);
listView.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> av, View v, int position, long arg3) {
}
});
new getVideosTask().execute();
}
VideoModel.java:
class VideoModel {
public String title;
public String videoUrl;
public String imageUrl;
}
VideoLayout.java:
class VideoLayout extends LinearLayout{
public Context context;
public MyImageView imageView;
public MyVideoView videoView;
public TextView titleView;
public VideoLayout(Context context) {
super(context);
this.context = context;
}
public VideoLayout (Context context, AttributeSet attrs) {
super(context, attrs);
}
public VideoLayout (Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
protected void onFinishInflate()
{
super.onFinishInflate();
imageView = (MyImageView) findViewById(R.id.placeholder);
videoView = (MyVideoView) findViewById(R.id.video);
titleView = (TextView) findViewById(R.id.title);
}
public void changeTitle(String text){
titleView.setText(text);
}
}
@覆盖
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
视图包装器=View.findviewbyd(R.id.wrapper);
if(包装器!=null&&VideoLayout包装器实例){
包装物。变更所有权(“所有权”);
}
}
已解决
我简化了它(基于@thinear的回答):
@覆盖
公共位置(适配器视图av、视图v、内部位置、,
长id){
VideoLayout包装器=(VideoLayout)v.findViewById(R.id.wrapper);
包装物。变更所有权(“所有权”);
}
我得到了一个相关的问题:当我试图在changetTitle
方法中显示一个Toast时,它在这一行抛出一个nullPointerException
错误。看起来toast显示的上下文是空的。有什么想法吗?你能粘贴Toast代码吗?它现在开始以奇怪的方式运行:当我单击第二行时,changetTitle
似乎也适用于其他项目。
class VideoModel {
public String title;
public String videoUrl;
public String imageUrl;
class VideoLayout extends LinearLayout{
public Context context;
public MyImageView imageView;
public MyVideoView videoView;
public TextView titleView;
public VideoLayout(Context context) {
super(context);
this.context = context;
}
public VideoLayout (Context context, AttributeSet attrs) {
super(context, attrs);
}
public VideoLayout (Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
protected void onFinishInflate()
{
super.onFinishInflate();
imageView = (MyImageView) findViewById(R.id.placeholder);
videoView = (MyVideoView) findViewById(R.id.video);
titleView = (TextView) findViewById(R.id.title);
}
public void changeTitle(String text){
titleView.setText(text);
}
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
View wrapper = view.findViewById(R.id.wrapper);
if(wrapper != null && wrapper instanceof VideoLayout) {
wrapper.changeTitle("title");
}
}
@Override
public void onItemClick(AdapterView<?> av, View v, int position,
long id) {
VideoLayout wrapper = (VideoLayout) v.findViewById(R.id.wrapper);
wrapper.changeTitle("title");
}