使用Horizo​​ntalScrollView获取项目位置和名称

时间:2014-10-01 08:45:16

标签: android horizontalscrollview

当使用Horizo​​ntalScrollView时,如何获取被点击的项目名称和位置,当我点击任何Horizo​​ntalScrollView项目时,我想显示项目的名称和位置,

我尝试了这个,但没有任何对我有用:

centerLockHorizontalScrollview.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            int s = v.getId();          
            Toast.makeText(MainActivity.this, "Id is: " +s, Toast.LENGTH_LONG).show();
        }
    });

我多次处理ListView,这对我有用:

listview.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                    long id) {
                // TODO Auto-generated method stub
                Toast.makeText(getApplicationContext(), actorsList.get(position).getName(), Toast.LENGTH_LONG).show();              
            }
        });

检查下面的代码:

public class MainActivity extends Activity {

CenterLockHorizontalScrollview centerLockHorizontalScrollview;
ArrayList<Actors> actorsList;   
ActorAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    actorsList = new ArrayList<Actors>();
    new JSONAsyncTask().execute("http://microblogging.wingnity.com/JSONParsingTutorial/jsonActors");

    centerLockHorizontalScrollview = (CenterLockHorizontalScrollview) findViewById(R.id.scrollView);        
    adapter = new ActorAdapter(getApplicationContext(), R.layout.row, actorsList);      
    centerLockHorizontalScrollview.setAdapter(MainActivity.this, adapter);          
}

ActorAdapter:

public class ActorAdapter extends ArrayAdapter<Actors> {
Context context;
ArrayList<Actors> actorList;
LayoutInflater vi;
int Resource;
ViewHolder holder;
public int currPosition = 0;

public ActorAdapter(Context context, int resource, ArrayList<Actors> objects) {
    super(context, resource, objects);
    this.context = context;
    vi = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    Resource = resource;
    actorList = objects;
}


@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    // convert view = design
    View v = convertView;
    if (v == null) {
        holder = new ViewHolder();
        v = vi.inflate(Resource, null);
        holder.imageview = (ImageView) v.findViewById(R.id.ivImage);
        holder.tvName = (TextView) v.findViewById(R.id.tvName);
        v.setTag(holder);
    } else {
        holder = (ViewHolder) v.getTag();
    }
    holder.imageview.setImageResource(R.drawable.ic_launcher);
    new DownloadImageTask(holder.imageview).execute(actorList.get(position).getImage());
    holder.tvName.setText(actorList.get(position).getName());

    return v;
}

static class ViewHolder {
    public ImageView imageview;
    public TextView tvName;
}

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
    ImageView bmImage;

    public DownloadImageTask(ImageView bmImage) {
        this.bmImage = bmImage;
    }

    protected Bitmap doInBackground(String... urls) {
        String urldisplay = urls[0];
        Bitmap mIcon11 = null;
        try {
            InputStream in = new java.net.URL(urldisplay).openStream();
            mIcon11 = BitmapFactory.decodeStream(in);
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return mIcon11;
    }

    protected void onPostExecute(Bitmap result) {
        bmImage.setImageBitmap(result);
      }
  }

public int getCurrentPosition(){
    return currPosition;
  }
}

1 个答案:

答案 0 :(得分:1)

在适配器的 getView 方法中执行此操作。这样你就可以获得你想要的物品的位置。即:

 @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        // convert view = design
        View v = convertView;
        if (v == null) {
            holder = new ViewHolder();
            v = vi.inflate(Resource, null);
            holder.imageview = (ImageView) v.findViewById(R.id.ivImage);
            holder.tvName = (TextView) v.findViewById(R.id.tvName);
            v.setTag(holder);
        } else {
            holder = (ViewHolder) v.getTag();
        }
        holder.imageview.setImageResource(R.drawable.ic_launcher);
        new DownloadImageTask(holder.imageview).execute(actorList.get(position).getImage());
        holder.tvName.setText(actorList.get(position).getName());
        v.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Toast.makeText(getApplicationContext(), actorsList.get(position).getName(), Toast.LENGTH_LONG).show();     

            }
        });
        return v;

    }