이미지 ID는 위치를 getItemId에 전달하여 이러한 방식으로 OnClick 이벤트에서 전달할 수 있습니까?

피라미드 S

이미지 및 관련 텍스트의 사용자 지정 gridview를 만들었습니다. 이미지를 클릭하면 새 DetailActivity에 표시되기를 원합니다. 하지만 표시하는 데 문제가 있습니다. gridview에서 항목을 클릭하면 앱이 충돌합니다.

누구든지 내 코드의 문제를 지적 할 수 있습니까?

이것은 Custom Grid Adapter의 코드입니다.

public class CustomAdapter extends BaseAdapter {

Context context;
int[] imagesId;
String[] names;
long imageId;
public static LayoutInflater layoutInflater = null;

public CustomAdapter(MainActivity mainActivity, int[] LimagesId, String[] Lnames) {
    this.context = mainActivity;
    this.imagesId = LimagesId;
    this.names = Lnames;
    this.layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount() {
    return names.length;
}

@Override
public Object getItem(int position) {
    return position;
}

@Override
public long getItemId(int position) {
    return position;
}

public class Holder {
    TextView textView;
    ImageView imageView;
}

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

    final Holder holder = new Holder();
    View rowView;
    //define rows
    rowView = layoutInflater.inflate(R.layout.program_list, null);
    holder.imageView = (ImageView) rowView.findViewById(R.id.imageView1);
    holder.textView = (TextView) rowView.findViewById(R.id.textView1);
    holder.imageView.setImageResource(imagesId[position]);
    holder.textView.setText(names[position]);
    rowView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(context, "You clicked " + names[position], Toast.LENGTH_SHORT ).show();
            imageId = getItemId(position);
            Intent intent = new Intent(context, DetailsActivity.class);
            intent.putExtra("image",imageId);
            context.startActivity(intent);
        }
    });
    return rowView; }
}

이것은 DetailActivity의 코드입니다.

public class DetailsActivity extends ActionBarActivity {

 int[] imageId = {R.drawable.image1,R.drawable.image2,R.drawable.image1,R.drawable.image2,R.drawable.image3,R.drawable.image4,R.drawable.image5,R.drawable.image6,R.drawable.image7,R.drawable.image8,R.drawable.image9,R.drawable.image10};


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_details);
    Intent intent = new Intent();
    long position = intent.getLongExtra("image", R.drawable.image1);
    ImageView imageView = (ImageView) findViewById(R.id.detail_imageView);
    Integer pos = (int) (long) position;
    imageView.setImageResource(imageId[pos]);
}
히치 유나이티드

좋습니다. 코드에 많은 문제가 있습니다.

  1. 어댑터의 getId 메소드는 이미지가 아닌 경우 어댑터에서 사용되는 고유 ID입니다.
  2. 해당 imageId []는 어디에도 초기화되지 않습니다.
  3. 인 텐트에 holder.imageview.getId ()를 전달해야합니다.
  4. 추가 인 텐트는 위의 변경을 수행 한 후 getLongExtra ()가 아닌 getIntExtra () 여야합니다.
  5. 올바른 imageId를 성공적으로 전달하면 게시 한 코드로 알 수있는 한 해당 imageId []가 필요하지 않습니다. setImageResource 내부의 인 텐트에서받은 int를 사용하십시오.

이렇게 변경하고 어떻게 진행되는지 알려주십시오. 오류가 더 있거나 누락 된 것이 있으면이 답변을 편집하겠습니다.

편집 : 글쎄, 당신은 대답의 코드를 약간 변경했기 때문에 일부 포인트가 관련이없는 것처럼 보일 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관