猿问

学完(Android疯狂猜歌 5-2 实现待选文字框点击事件)课程出现的小问题

疯狂猜歌 5-2 实现待选文字框点击事件  自定义的GirdView中,holder的值是a0...a23


holder如果定义在getView 里就没事,点击a1就显示a1,但是,如果定义在成员变量里,无论点击哪个按钮,都只是显示a0,求解答

54b547720001edb705000237.jpg


以下是源码

自定义的=====================================gridView====================== 


package cn.bashi.GuessMusic.mui;


import java.util.ArrayList;


import android.content.Context;

import android.util.AttributeSet;

import android.view.View;

import android.view.ViewGroup;

import android.view.animation.Animation;

import android.view.animation.AnimationUtils;

import android.widget.BaseAdapter;

import android.widget.Button;

import android.widget.GridView;

import cn.bashi.GuessMusic.R;

import cn.bashi.GuessMusic.model.ButtonWorld;

import cn.bashi.GuessMusic.model.IWorldButtonClickListener;

import cn.bashi.GuessMusic.util.Util;


public class MyGridView extends GridView {


private ArrayList<ButtonWorld> ButtonWorlds = new ArrayList<ButtonWorld>();

private myBaseAdapter myBase;

private Context context;

private Animation mScaleAnimation;

private IWorldButtonClickListener WorldButtonClickListener;

public MyGridView(Context context, AttributeSet attrs) {

super(context, attrs);

this.context = context;

myBase = new myBaseAdapter();

setAdapter(myBase);

}

public void updateData(ArrayList<ButtonWorld> ButtonWorlds){

this.ButtonWorlds = ButtonWorlds;

setAdapter(myBase);

}

class myBaseAdapter extends BaseAdapter{


@Override

public int getCount() {

// TODO 自动生成的方法存根

return ButtonWorlds.size();

}


@Override

public Object getItem(int position) {

// TODO 自动生成的方法存根

return ButtonWorlds.get(position);

}


@Override

public long getItemId(int position) {

// TODO 自动生成的方法存根

return position;

}


@Override

public View getView(int position, View convertView, ViewGroup parent) {

final ButtonWorld holder;

// 加载了所有item后,一起再放动画,动画没放完,没有view

if(convertView == null){

// 加载动画

mScaleAnimation = AnimationUtils.loadAnimation(context, R.anim.scale);

mScaleAnimation.setStartOffset(position * 100);

convertView = Util.getView(context, R.layout.mygridview_item);

holder = ButtonWorlds.get(position);

holder.setWorldId(position);

holder.setViewButtonWorld((Button) convertView.findViewById(R.id.worldBut_item));

holder.getViewButtonWorld().setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO 自动生成的方法存根

WorldButtonClickListener.onWorldButtonClick(holder);

}

});

convertView.setTag(holder);

}else{

holder = (ButtonWorld) convertView.getTag();

}

holder.getViewButtonWorld().setText(holder.getWorldValue());

convertView.startAnimation(mScaleAnimation);

return convertView;

}

}

public void regestOnWorldButtonClick(IWorldButtonClickListener listener){

this.WorldButtonClickListener = listener;

}

}



========================================holder================================

package cn.bashi.GuessMusic.model;


import android.widget.Button;


/** 显示的文字按钮*/

public class ButtonWorld {


private int worldId;

private String worldValue;

private Button ViewButtonWorld;

private boolean isVisibility;

public ButtonWorld(){

worldValue = "";

isVisibility = true;

}


public int getWorldId() {

return worldId;

}


public void setWorldId(int worldId) {

this.worldId = worldId;

}


public String getWorldValue() {

return worldValue;

}


public void setWorldValue(String worldValue) {

this.worldValue = worldValue;

}


public Button getViewButtonWorld() {

return ViewButtonWorld;

}


public void setViewButtonWorld(Button viewButtonWorld) {

ViewButtonWorld = viewButtonWorld;

}


public boolean isVisibility() {

return isVisibility;

}


public void setVisibility(boolean isVisibility) {

this.isVisibility = isVisibility;

}

}


==========================================MainActivity ============================

package cn.bashi.GuessMusic.ui;


import java.util.ArrayList;


import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.animation.Animation;

import android.view.animation.Animation.AnimationListener;

import android.view.animation.AnimationUtils;

import android.view.animation.LinearInterpolator;

import android.widget.Button;

import android.widget.ImageButton;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.LinearLayout.LayoutParams;

import android.widget.Toast;

import cn.bashi.GuessMusic.R;

import cn.bashi.GuessMusic.model.ButtonWorld;

import cn.bashi.GuessMusic.model.IWorldButtonClickListener;

import cn.bashi.GuessMusic.mui.MyGridView;

import cn.bashi.GuessMusic.util.Util;


public class MainActivity extends Activity {


/** 文字个数*/

public final int WORLD_COUNT = 24;

/** 盘片动画*/

private Animation mPanAnim;

private LinearInterpolator mPanLinear;

/** 拨杆进入动画*/

private Animation mBarInAnim;

private LinearInterpolator mBarInLinear;

/** 拨杆退出动画*/

private Animation mBarOutAnim;

private LinearInterpolator mBarOutLinear;

/** 按键*/

private ImageButton mButtonPlay;

private ImageView mViewPan;

private ImageView mViewBar;

private LinearLayout worldSelectView;

/** 是否动画正在运行*/

private boolean mIsRunning = false;


/** 文字数据*/

private ArrayList<ButtonWorld> ButtonSelectWorlds;

private ArrayList<ButtonWorld> ButtonWorlds;

/** 自定义的控件*/

private MyGridView myGrid;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

// 盘片

mViewPan = (ImageView) findViewById(R.id.pan);

// 摇杆

mViewBar = (ImageView) findViewById(R.id.bar);

// 按钮

mButtonPlay = (ImageButton) findViewById(R.id.but_play);

// 文字选区

worldSelectView = (LinearLayout) findViewById(R.id.world_select);

myGrid = (MyGridView) findViewById(R.id.mgrid);

myGrid.regestOnWorldButtonClick(new IWorldButtonClickListener(){


@Override

public void onWorldButtonClick(ButtonWorld buttonWorld) {

// TODO 自动生成的方法存根

Toast.makeText(MainActivity.this, buttonWorld.getWorldValue(), 1).show();

}

});

// 初始化动画

mPanAnim = AnimationUtils.loadAnimation(this, R.anim.rotate);

mPanLinear = new LinearInterpolator();

mPanAnim.setInterpolator(mPanLinear);

mPanAnim.setAnimationListener(new AnimationListener() {

@Override

public void onAnimationStart(Animation animation) {

}

@Override

public void onAnimationRepeat(Animation animation) {

}

@Override

public void onAnimationEnd(Animation animation) {

mViewBar.setAnimation(mBarOutAnim);

mIsRunning = false;

mButtonPlay.setVisibility(View.VISIBLE);

}

});

mBarInAnim = AnimationUtils.loadAnimation(this, R.anim.rotate_45);

mBarInAnim.setFillAfter(true);

mBarInLinear = new LinearInterpolator();

mBarInAnim.setInterpolator(mBarInLinear);

mBarInAnim.setAnimationListener(new AnimationListener() {


@Override

public void onAnimationStart(Animation animation) {

}


@Override

public void onAnimationEnd(Animation animation) {


// 盘片开始转动

mViewPan.startAnimation(mPanAnim);

}


@Override

public void onAnimationRepeat(Animation animation) {

}

});

mBarOutAnim = AnimationUtils.loadAnimation(this, R.anim.rotate_out_45);

mBarOutAnim.setFillAfter(true);

mBarOutLinear = new LinearInterpolator();

mBarOutAnim.setInterpolator(mBarOutLinear);

// 开始按钮

mButtonPlay.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {


// 动画开始

if(!mIsRunning && mViewBar != null){


mIsRunning = true;

mButtonPlay.setVisibility(View.GONE);

mViewBar.startAnimation(mBarInAnim);

}

}

});

LoadUnderView();

}

/** 获取字体的布局*/

public void LoadUnderView(){

// 加载文字选框

LoadWorldSelectView();

// 加载文字待选区

LoadWorldView();

}

/** 加载文字选框*/

public void LoadWorldSelectView(){

ButtonSelectWorlds = getWorldsSelectData();

for(int n = 0; n < ButtonSelectWorlds.size(); n++){

worldSelectView.addView(ButtonSelectWorlds.get(n).getViewButtonWorld(), new LayoutParams(140, 140));

}

}

/** 加载文字待选区*/

public void LoadWorldView(){

ButtonWorlds = getWorldsData();

// 加载数据

myGrid.updateData(ButtonWorlds);

}

@Override

protected void onPause() {

mViewPan.clearAnimation();

super.onPause();

}

/** 获取文字数据*/

public ArrayList<ButtonWorld> getWorldsSelectData(){

ButtonSelectWorlds = new ArrayList<ButtonWorld>();

ButtonWorld worldSelect;


for(int n = 0; n < 4; n++){

worldSelect = new ButtonWorld();

View v = Util.getView(MainActivity.this, R.layout.mygridview_item);

worldSelect.setViewButtonWorld((Button)v.findViewById(R.id.worldBut_item));

worldSelect.getViewButtonWorld().setBackgroundResource(R.drawable.game_wordblank);

worldSelect.getViewButtonWorld().setText("");

ButtonSelectWorlds.add(worldSelect);

}

return ButtonSelectWorlds;

}

/** 获取文字数据*/

public ArrayList<ButtonWorld> getWorldsData(){

ButtonWorlds = new ArrayList<ButtonWorld>();

ButtonWorld World;


for(int n = 0; n < WORLD_COUNT; n++){

World = new ButtonWorld();

World.setWorldValue("好"+n);

ButtonWorlds.add(World);

}

return ButtonWorlds;

}

}


==============================================IWorldButtonClickListener ===============

package cn.bashi.GuessMusic.model;


public interface IWorldButtonClickListener {


public void onWorldButtonClick(ButtonWorld buttonWorld);

}


bs_0001
浏览 1712回答 1
1回答
随时随地看视频慕课网APP

相关分类

Android
我要回答