Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从活动调用方法来更改布局?_Java_Android - Fatal编程技术网

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");
        }