图像查看器片段(Android)

图像查看器片段(Android),android,android-layout,android-fragments,android-imageview,android-image,Android,Android Layout,Android Fragments,Android Imageview,Android Image,我试图创建一个简单的片段,当点击时只显示一个图像。我遇到了很多错误,包括“类型ExampleFragment的方法findViewbyId(int)未定义”、“充气器无法解析”和“imageview\u main无法解析或不是字段”。imageview\u main是我创建的布局,imageView1是该布局中包含的图像。以下是片段代码: package com.firstproject.simplemenu; import android.app.Activity; import androi

我试图创建一个简单的片段,当点击时只显示一个图像。我遇到了很多错误,包括“类型ExampleFragment的方法findViewbyId(int)未定义”、“充气器无法解析”和“imageview\u main无法解析或不是字段”。imageview\u main是我创建的布局,imageView1是该布局中包含的图像。以下是片段代码:

package com.firstproject.simplemenu;
import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup; 
import android.view.View.OnClickListener;
import android.widget.Button;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;

import android.app.Fragment;
import android.widget.ImageView;

public class ExampleFragment extends Fragment {

Button button;
ImageView image;


public ExampleFragment() {

}

public static ExampleFragment newInstance() {
    return new ExampleFragment();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    ImageView imageview = (ImageView)findViewById(R.id.imageView1);
    return Inflater.inflate(R.layout.iamgeview_main, container, false);
    }

public void addListenerOnButton() {


    button = (Button) findViewById(R.id.btnChangeImage);
    button.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            image.setImageResource(R.drawable.eagle);
        }

    });

}

findViewById是类活动中的一个方法。要避免传递整个活动的实例,请使用WeakRefence(请参阅) 比如说

private WeakReference<MainActivity> activity;

public ExampleFragment(MainActivity mainActivity) {
   activity = new WeakReference<MainActivity>(mainActivity);
} 

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
    ImageView imageview = (ImageView)activity.findViewById(R.id.imageView1);
    return Inflater.inflate(R.layout.iamgeview_main, container, false);
}
私人WeakReference活动;
公共示例片段(MainActivity MainActivity){
活动=新的WeakReference(主活动);
} 
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
ImageView=(ImageView)activity.findViewById(R.id.imageView1);
返回充气机。充气(R.layout.iamgeview_main,容器,假);
}

我对您的代码添加了以下修改

1) 从支持库导入片段(如果在早期版本的android上运行,这一点很重要)

2) 代替充气机,我使用收到的充气机作为方法参数

3) 我创建了一个可以在这个片段中使用的findviewbyd方法

4) 我在activitycreated方法中移动了一些初始化代码

你可以找到更多关于这种方法的信息

package com.example.gctest;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup; 
import android.view.View.OnClickListener;
import android.webkit.WebView.FindListener;
import android.widget.Button;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;

import android.widget.ImageView;

public class ExampleFragment extends Fragment {

Button button;
ImageView image;


public ExampleFragment() {

}

public static ExampleFragment newInstance() {
    return new ExampleFragment();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

        //ImageView imageview = (ImageView)findViewById(R.id.imageView1); this will raise NullPointerException because the parent view has not been created. Is is created with this method;
        return inflater.inflate(R.layout.iamgeview_main, container, false); //just return the  view ;
    }

@Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        //here you can initialise your variables,listeners,e.t.c ;
        super.onActivityCreated(savedInstanceState);

        ImageView imageview = (ImageView)findViewById(R.id.imageView1);
        addListenerOnButton();
    }

/**
 * You can use this method in order to access the child views of the fragment parent view;
 * @param id
 * @return
 */
protected View findViewById(int id)
{
    return getView().findViewById(id);
}

public void addListenerOnButton() {


    button = (Button) findViewById(R.id.btnChangeImage);
    button.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            image.setImageResource(R.drawable.eagle);
        }

    });

}

我需要包括一些图书馆吗?当我尝试这个给定的代码时,我得到了充气机、活动、imageview\u main和WeakReference上的各种错误…你能发布整个堆栈跟踪吗?非常感谢!这解决了片段中的错误,但出于某种原因,我的主要活动仍然不允许我调用片段。我得到一个错误:“FragmentTransaction类型中的方法replace(int,Fragment)不适用于以下行中的参数(int,ExampleFragment)”:replace(R.id.container,ExampleFragment.newInstance())……有什么想法吗?1)确保您的活动扩展FragmentActivity,2) 您的替换片段代码看起来类似于以下FragmentTransaction FragmentTransaction=getSupportFragmentManager().beginTransaction();fragmentTransaction.replace(containerResId,ExampleFragment.newInstance());fragmentTransaction.commit()!再次从支持库导入导入android.support.v4.app.FragmentTransaction;