2016-09-06 3 views
-1

활동 코드 :itemClickListener listView에서 항목을 클릭하는 방법?

package com.example.tayyab.myapplication; 

import android.content.Intent; 
import android.graphics.Typeface; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ImageButton; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MyProfile extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_my_profile); 

     populateListView(); 
    } 

    private void populateListView() { 

     String[] myItems = {"Missions","Messages","Camera","Gallery","Temprature","Humidity"}; 
     int[] img = {R.drawable.target,R.drawable.chat,R.drawable.camera,R.drawable.gallery,R.drawable.temp,R.drawable.humidity}; 
     //ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item,myItems); 
     //ArrayAdapter<Integer> ad = new ArrayAdapter<Integer>(this,R.layout.list_item,img); 

     final ProfileAdapter adapter = new ProfileAdapter(getApplicationContext(),R.layout.list_item); 
     int i=0; 
     for(String Name : myItems){ 
      Profile obj = new Profile(Name,img[i]); 
      adapter.add(obj); 
      i++; 
     } 

     ListView list = (ListView) findViewById(R.id.listViewMain); 
     list.setAdapter(adapter); 
     list.setClickable(true); 
     ImageButton b3 = (ImageButton)findViewById(R.id.imageButton); 
     b3.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent= new Intent(MyProfile.this,MainMission.class); 
       startActivity(intent); 
      } 
     }); 

     list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
       Log.i("Log ","Inside Click Listener"); 
       String myItems = (String) adapterView.getItemAtPosition(i); 
       Toast.makeText(view.getContext(),myItems,Toast.LENGTH_SHORT).show(); 
       if(i==1) { 
        Log.i("Message Event", "Inside Message Activity"); 
        Intent a = new Intent(MyProfile.this, MainMission.class); 
        startActivity(a); 
       } 
      } 
     }); 
    } 
} 

어댑터 클래스 :

package com.example.tayyab.myapplication; 

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

import java.util.ArrayList; 
import java.util.List; 

public class ProfileAdapter extends ArrayAdapter { 

    private List list = new ArrayList(); 

    public ProfileAdapter(Context context, int resource) { 
     super(context, resource); 
    } 

    public void add(Profile object) { 
     list.add(object); 
     super.add(object); 
    } 

    static class ImageHolder { 
     ImageView img; 
     TextView txt; 
    } 

    @Override 
    public int getCount() { 
     return this.list.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return this.list.get(position); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View row; 
     row = convertView; 
     ImageHolder holder; 
     if (convertView == null) { 
      LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      row = inflater.inflate(R.layout.list_item, parent, false); 
      holder = new ImageHolder(); 
      holder.img = (ImageView) row.findViewById(R.id.profile_images); 
      holder.txt = (TextView) row.findViewById(R.id.profile_names); 
      row.setTag(holder); 
     } 
     else {   
      holder = (ImageHolder) row.getTag(); 
     } 

     Profile pr = (Profile) getItem(position); 
     holder.img.setImageResource(pr.getImg_names()); 
     holder.txt.setText(pr.getItem_names()); 

     return row; 
    } 
} 
+0

목록의 클릭 된 항목을 올바르게 가져 오시겠습니까? 행 레이아웃에 onclicklistener를 설정 한 다음 원하는 항목을 수행해야합니다. 클릭 된 항목을 액티비티에 전달해야하는 경우 매개 변수로 위치를 전달하여 인터페이스를 사용하거나 액티비티를 호출 할 수 있습니다. –

+0

당신이하고 싶은 것을 분명히하지 마십시오. – MikeKeepsOnShine

답변

0

은 아마 당신은 ListView에 항목에 클릭을 수신하는 수신기를 만들고 싶어. 당신이 한 일은 적절한 방법이 아닙니다.

당신은 당신의 ListView가

listView.setOnItemClickListener(new OnItemClickListener() 
{ 
    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) 
    { 
     Toast.makeText(getContext(), "Item #" + position, Toast.LENGTH_SHORT).show(); 
    } 
}); 

당신이 클릭 어떤 항목을 알려주는 기본 리스너가에 onItemClickListener를 추가해야합니다. onItemClick 메서드 내에서 로직을 수행 할 수 있습니다. 당신이 당신의 ListView의 행에 대해 사용자 지정 레이아웃을 사용하는 경우

또한, 목록 내부의 첫 번째 부모 레이아웃에

android:descendantFocusability="blocksDescendants" 

를 추가해야합니다.

또한 ListView 대신 RecyclerView를 사용하는 것이 좋습니다.

관련 문제