图像查看器的片段(Android)

时间:2014-06-25 19:00:10

标签: android android-layout android-fragments android-imageview android-image

我正在尝试创建一个仅在单击时显示图像的简单片段。我得到了很多错误,包括“方法findViewbyId(int)未定义类型ExampleFragment”,“Inflater无法解析”,“imageview_main无法解析或不是字段”。 imageview_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);
        }

    });

}

2 个答案:

答案 0 :(得分:1)

findViewById是Activity类中的一个方法。为避免传递整个活动的实例,请使用WeakRefence(请参阅http://developer.android.com/reference/java/lang/ref/WeakReference.html) 例如

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

答案 1 :(得分:1)

我在您的代码中添加了以下修改内容;

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

2)Inflater的Insted我使用收到的inflater作为方法参数;

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

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

你可以找到更多有关该方法的信息;

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

    });

}