1

CustomAdapter.class목록보기 setonitemclicklistener는

public class CustomAdapter extends ArrayAdapter<String> { 
    Context context; 
    int[] images; 
    String[] titleArray; 
    String[] descriptionArrayl; 
    public CustomAdapter(Context c,String[] memeTitles,int[] imgs,String[] descriptionArrayl) { 
super(c,R.layout.row,R.id.etTitle,memeTitles); 
     this.context=c; 
     this.images = imgs; 
     this.titleArray = memeTitles; 
     this.descriptionArrayl=descriptionArrayl; 
    } 
    //Sub class of CustomAdapter 
    class MyViewHolder{ 
     ImageView myImage; 
     TextView myTitle; 
     TextView myDescription; 
     MyViewHolder(View v){ 

      myImage= (ImageView) v.findViewById(R.id.imageView); 
      myTitle = (TextView) v.findViewById(R.id.etTitle); 
      myDescription = (TextView) v.findViewById(R.id.etDescriptions); 
     } 
    } 

    //Get View Method of CustomAdapter class 
    public View getView(int position, View convertView, ViewGroup parent){ 
     View row=convertView; 
     MyViewHolder myViewHolder =null; 
     if (row==null) { 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE); 
      row = inflater.inflate(R.layout.row, parent, false); 
      myViewHolder = new MyViewHolder(row); 
      Log.d("List View","Creating New Row"); 
      row.setTag(myViewHolder); 
     }else { 
      myViewHolder = (MyViewHolder) row.getTag(); 
      Log.d("List View","Recycling Stuff"); 

     } 
     myViewHolder.myImage.setImageResource(images[position]); 
     myViewHolder.myTitle.setText(titleArray[position]); 
     myViewHolder.myDescription.setText(descriptionArrayl[position]); 


     return row; 
    } 
} 

에게조차 나를 흐름을 스택에 사용 가능한 거의 모든 솔루션을 적용

package com.faisal.listviewtask; 

import android.content.res.Resources; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ListView; 
import android.widget.Toast; 

public class MainActivity extends AppCompatActivity { 

    ListView listView; 
    String[] memeTitles; 
    String[] memeDescriptions; 
    CustomAdapter customAdapter; 
    int[] image = {R.drawable.meme1, R.drawable.meme2, 
      R.drawable.meme3, R.drawable.meme4, 
      R.drawable.meme5, R.drawable.meme6, 
      R.drawable.meme7, R.drawable.meme8, 
      R.drawable.meme9, R.drawable.meme10, 
      R.drawable.meme1, R.drawable.meme2, 
      R.drawable.meme3, R.drawable.meme4, 
      R.drawable.meme5, R.drawable.meme6, 
      R.drawable.meme7, R.drawable.meme8, 
      R.drawable.meme9, R.drawable.meme10}; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     listView = (ListView) findViewById(R.id.listview); 


     Resources res = getResources(); 
     memeTitles = res.getStringArray(R.array.titles); 
     memeDescriptions = res.getStringArray(R.array.descriptions); 

     customAdapter = new CustomAdapter(this, memeTitles, image, memeDescriptions); 
     listView.setAdapter(customAdapter); 

     listView.setItemsCanFocus(false); 
     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
       Toast.makeText(MainActivity.this, "you clicked" + i, Toast.LENGTH_LONG).show(); 
       Log.d("onitemclick Listener","called"); 
      } 
     }); 

    } 
} 

main_activity.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:descendantFocusability="blocksDescendants" 
    tools:context="com.faisal.listviewtask.MainActivity"> 
    <ListView 
     android:clickable="true" 
     android:id="@+id/listview" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     > 
    </ListView> 

</RelativeLayout> 
MainActivity.class 작동하지 않습니다

행 레이아웃.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    > 
    <ImageView 
     android:focusable="false" 
     android:focusableInTouchMode="false" 
     android:id="@+id/imageView" 
     android:layout_width="46dp" 
     android:layout_height="46dp" 
     android:layout_margin="10dp" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentStart="true" 
     /> 

    <TextView 
     android:focusable="false" 
     android:focusableInTouchMode="false" 
     android:id="@+id/etTitle" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:inputType="textPersonName" 
     android:text="Title" 
     android:textStyle="bold" 
     android:textSize="25sp" 
     android:layout_alignTop="@+id/imageView" 
     android:layout_toRightOf="@id/imageView" 
     android:layout_alignParentRight="true" 
     /> 

    <TextView 
     android:focusable="false" 
     android:focusableInTouchMode="false" 
     android:id="@+id/etDescriptions" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:inputType="textPersonName" 
     android:text="Name" 
     android:textSize="15sp" 
     android:layout_below="@+id/etTitle" 
     android:layout_alignParentEnd="true" 
     android:layout_toEndOf="@+id/imageView" /> 
</RelativeLayout> 

죄송합니다. 이것은 내 모든 코드입니다. 나는 android:focusable="false", android:focusableInTouchMode="false" 같은 모든 태그를 목록보기의 행에 추가했으며 목록보기의 루트 레이아웃에는 android:descendantFocusability="blocksDescendants"을, 은 listView.setOnItemClickListener 앞에 코드로 추가했습니다.이 onitem 클릭 리스너 doe는 작동하지 않고 응답이 없습니다.

답변

0

당신이 경우 모든 코드가 정확하고도 아무런 예외 코드에 남아 없지만 ItemClickListener에 ListView를 다음 작동하지 않는 경우 다음을 실행하면/
다시 시작을 사용하여 캐시에게 안드로이드 스튜디오에서 사용할 수있는 옵션을 무효화 할 필요가 Listview 프로젝트에서 OnItemClick Listener가 올바르게 작동합니다. android studio의 왼쪽 상단에있는 File Option을 클릭하여 invalidate caches/restart 옵션을 선택하십시오.

0
 add this in Activity [updated] 

     customAdapter = new CustomAdapter(this, memeTitles, image, memeDescriptions,new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
     int i=(Integer)view.getTag(); 
         Toast.makeText(MainActivity.this, "you clicked" + i, Toast.LENGTH_LONG).show(); 
         Log.d("onitemclick Listener","called"); 
        } 


       }); 
       listView.setAdapter(customAdapter); 

     And add id as rootLayout in row xml 

     public class CustomAdapter extends ArrayAdapter<String> { 
      Context context; 
      int[] images; 
      String[] titleArray; 
      String[] descriptionArrayl; 
    OnClickListener onClickListener; 
      public CustomAdapter(Context c,String[] memeTitles,int[] imgs,String[] descriptionArrayl,OnClickListener onClickListener) { 
     super(c,R.layout.row,R.id.etTitle,memeTitles); 
       this.context=c; 
       this.images = imgs; 
       this.titleArray = memeTitles; 
       this.descriptionArrayl=descriptionArrayl; 
       this.onClickListener=onClickListener; 
      } 
      //Sub class of CustomAdapter 
      class MyViewHolder{ 
       ImageView myImage; 
       TextView myTitle; 
       TextView myDescription; 
       RelativeLayout rootLayout; 
       MyViewHolder(View v){ 
     rootLayout=(RelativeLayout)v.findViewById(R.id.rootLayout); 
        myImage= (ImageView) v.findViewById(R.id.imageView); 
        myTitle = (TextView) v.findViewById(R.id.etTitle); 
        myDescription = (TextView) v.findViewById(R.id.etDescriptions); 
       } 
      } 

      //Get View Method of CustomAdapter class 
      public View getView(int position, View convertView, ViewGroup parent){ 
       View row=convertView; 
       MyViewHolder myViewHolder =null; 
       if (row==null) { 
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE); 
        row = inflater.inflate(R.layout.row, parent, false); 
        myViewHolder = new MyViewHolder(row); 
        Log.d("List View","Creating New Row"); 
        row.setTag(myViewHolder); 
       }else { 
        myViewHolder = (MyViewHolder) row.getTag(); 
        Log.d("List View","Recycling Stuff"); 

       } 
       myViewHolder.myImage.setImageResource(images[position]); 
       myViewHolder.myTitle.setText(titleArray[position]); 
       myViewHolder.myDescription.setText(descriptionArrayl[position]); 
     rootLayout.setTag(position); 
     rootLayout.setOnClickListener(onClickListener); 

       return row; 
      } 
     } 


row layout.xml 

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    > 
<RelativeLayout 
android:id="@+id/rootLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    > 
    <ImageView 
     android:focusable="false" 
     android:focusableInTouchMode="false" 
     android:id="@+id/imageView" 
     android:layout_width="46dp" 
     android:layout_height="46dp" 
     android:layout_margin="10dp" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentStart="true" 
     /> 

    <TextView 
     android:focusable="false" 
     android:focusableInTouchMode="false" 
     android:id="@+id/etTitle" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:inputType="textPersonName" 
     android:text="Title" 
     android:textStyle="bold" 
     android:textSize="25sp" 
     android:layout_alignTop="@+id/imageView" 
     android:layout_toRightOf="@id/imageView" 
     android:layout_alignParentRight="true" 
     /> 

    <TextView 
     android:focusable="false" 
     android:focusableInTouchMode="false" 
     android:id="@+id/etDescriptions" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:inputType="textPersonName" 
     android:text="Name" 
     android:textSize="15sp" 
     android:layout_below="@+id/etTitle" 
     android:layout_alignParentEnd="true" 
     android:layout_toEndOf="@+id/imageView" /> 
</RelativeLayout> 
</RelativeLayout> 
+1

this.onClickListener = onClickListener; 이 하나의 쇼 오류 를 추가하는 방법 , view.OnClickListener OnClickListener를 은 paramerter에 –

+0

@FaisalShabbir 그냥이 –

+0

@FaisalShabbir를 클래스 변수 OnClickListener를 선언 알아보기 쇼 레드 라인과 함께 사용되는 앱을 실행하려고합니다. –