2012-04-16 51 views
3

我有兩個佈局如何從自定義列表適配器中獲取listview的行索引?

  1. main.xml -----通過單一的ListView(比如listview_01)。
  2. row.xml -----隨着ImageView的(比如imageView_01)&一個TextView(說textView_01)

我與row.xml使用數組數據,我有我的填充作爲listview_01一行。
我想對onclick()事件imageView_01執行操作,它的工作。
我已在imageView_01上添加onClick()getView()在我的CustomlistAdapter中。

但任何人都可以告訴我如何獲取一行圖像的listview_01的onClick()事件中的行索引,在一個CustomListAdapter?

這裏是我的代碼

道歉,但我不能載我的整個活動&適配器代碼

一些活動代碼

listView_episodesList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
     // TODO Auto-generated method stub 

     mQuickAction.show(arg1); 

    } 
}); 

一些適配器代碼

ImageView imageView_EpisodePic = (ImageView) convertView.findViewById(R.id.imageView_episode_pic); 
drawableManager.fetchDrawableOnThread(episodeTemp.episodeImage, imageView_EpisodePic); 

imageView_EpisodePic.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View arg0) { 
     // TODO Auto-generated method stub 
     Toast.makeText(context, "Click on image", Toast.LENGTH_LONG).show(); 
    } 
}); 

從我的活動我可以訪問我點擊的listView行索引。但從適配器我不能。 我只是想行索引ListView(main.xml)上點擊ImageView (row.xml)

+0

粘貼您的適配器和活動代碼 – waqaslam 2012-04-16 13:21:25

+0

Waqas,請參考我上面的代碼。 – MicroEyes 2012-04-16 13:44:15

回答

1

您可以嘗試在onClick(View v)將返回列表視圖項的索引mListView.getPositionForView(v);。 (需要注意的是:我不知道該適配器,我只是猜測,你可以用它)

+0

請再次參考我的問題。我已經添加了我的代碼。 – MicroEyes 2012-04-16 13:43:45

0

onItemSelectedListeneter()將適配器的看法和立場,也ID ..在哪個位置是你所需要的(arg1

+0

sandy,OnItemSelectedListener()用於ListView onClick()。我想附加imageView onclick()事件在imageView onClick我想要獲取行索引..我認爲這是可能的,只有從自定義光標,我已經填補我的列表視圖 – MicroEyes 2012-04-16 13:39:49

0

我遇到了同樣的問題,並且很驚訝我無法從自定義適配器類中找到更好的方法。據我所知,Nikola的解決方案可以在Activity或Fragment類中使用,但不能在自定義適配器中使用。

我有一個問題,在我的對象的ImageView屬性中設置第一個索引[0]不能正確返回,但設置我的對象的'name'屬性的標記完美地工作。我將繼續尋找更好的方法來做到這一點,但現在這似乎工作正常。

 public View getView(int position, View convertView, ViewGroup parent) { 
     View view = null; 

     if (convertView == null) { 
      LayoutInflater inflator = context.getLayoutInflater(); 
      view = inflator.inflate(R.layout.row_project, null); 

      final ViewHolder viewHolder = new ViewHolder(); 
      viewHolder.name = (TextView)view.findViewById(R.id.textProjectName); 
      viewHolder.desc = (TextView)view.findViewById(R.id.textProjDesc); 
      viewHolder.image = (ImageView)view.findViewById(R.id.imgProj);   
      viewHolder.name.setTag(position); 

      Log.d(TAG, "Position: " + position); 


      viewHolder.image.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Log.d(TAG, "Image Selected at Index: " + viewHolder.name.getTag()); 
       } 

      }); 

      view.setTag(viewHolder); 
     } 
     else { 
      view = convertView; 
      ((ViewHolder) view.getTag()).name.setTag(list.get(position)); 
     } 

     ViewHolder holder = (ViewHolder) view.getTag(); 
     holder.name.setText(list.get(position).getName()); 
     holder.desc.setText(list.get(position).getDescription()); 

     return view; 
    } 
} 
-1

在我的自定義適配器,我有:

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

,其中位置是行的索引點擊。這應該可以在您的onClick()方法中訪問。

0

列表中某個項目的行ID正在設置爲「convertView」的ID。

convertView.setId(位置)

當按下一個項目/選擇,該項目的行id是OnClickListener內取出。

 convertView.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // item position is fetched here. this is exactly the same position of the selected item in your list 
       int selectedPosition = v.getId(); 
      } 
     }); 

您可以設置ID爲convertView的任何子女。例如,

convertView.imageView.setId(position);

然後取ID如下,

imageView.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      int selectedPosition = v.getId(); 
     } 
    }); 

全功能

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

    if (convertView == null) { 
     convertView = inflater.inflate(R.layout.row_book_item, null); 
     viewHolder = new ViewHolder(); 

     // ... 

     convertView.setTag(viewHolder); 
    } else { 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 

    if (listItems.size() > 0) { 
     // item position is set here. this is exactly the same position of your item in the list 
     convertView.setId(position); 
     convertView.imageView.setId(position); 

     // ... 

     convertView.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // item position is fetched here. this is exactly the same position of the selected item in your list 
       int selectedPosition = v.getId(); 
      } 
     }); 

     imageView.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // item position is fetched here. this is exactly the same position of the selected item in your list 
       int selectedPosition = v.getId(); 
      } 
     }); 


    } 
    return convertView; 
} 
+0

也許添加一些解釋給你片段。 – ppasler 2017-02-07 12:41:15

相關問題