2017-05-02 68 views
0

我有一個包含textview,複選框和imageview的自定義列表視圖。如果選中複選框,則textview和imageview將會顯示。當我點擊textView時,我會拍照並在imageview中顯示。因爲我不能在適配器中調用onActivityResult,所以我在Activity中調用它,並且我希望將ListView中的對象的位置從適配器發送到活動,但它發送的錯誤是我在MainActivity中收到的位置爲null。那麼,我該如何解決這個問題?如何在自定義列表視圖中捕獲和顯示圖像

這裏是我的.xml文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/item_root" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:paddingTop="2dp" 
android:paddingBottom="2dp" 
android:paddingRight="10dp" 
android:paddingLeft="16dp" 
android:orientation="horizontal"> 


<TextView 
    android:id="@+id/tv_instore" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:fontFamily="sans-serif" 
    android:layout_centerVertical="true" 
    android:text="Product" 
    android:textSize="14sp" 
    android:layout_weight="1"/> 
<CheckBox 
    android:id="@+id/chk_instore" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center_horizontal" 
    android:layout_weight="1" 
    android:checked="false"/> 
<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:orientation="horizontal" 
    android:paddingTop="5dp"> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:text="Capture" 
     android:visibility="invisible" 
     android:id="@+id/txtCapture"/> 
    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/img1" 
     android:layout_weight="1" 
     android:paddingTop="5dp" 
     android:visibility="invisible"/> 
</LinearLayout> 

這裏是適配器:

txtCapture.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (mContext.getPackageManager().hasSystemFeature(
       PackageManager.FEATURE_CAMERA)) { 
       Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       i.putExtra("position",position); 
       ((Activity) mContext).startActivityForResult(i, 100); 
      } 
     } 
}); 

這是我在MainActivity onActivityResult():

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(requestCode==100&&resultCode==RESULT_OK){ 
     Bitmap b = (Bitmap)data.getExtras().get("data"); 
     int position = (int)data.getExtras().get("position"); 
     POSMQty p = arrPOSMInstore.get(position); 
     p.setBitmap(b); 
    } 
} 

回答

0

意圖你進去了活動結果與您在startActivityForResult()上傳遞的結果不同。這就是爲什麼你沒有得到職位。

爲此,您可以保存活動中的位置並在onActivityResult()中使用它。

0

問題是您發送的打開相機活動的意圖與您的活動結果中的Intent完全不同。意圖接收由相機活動創建,以將圖像數據發送到您的活動。

下面是一個解決方案,你可以做到這一點。

聲明一個變量在你的適配器位置點擊

private int posClicked = -1; 

,並在您

txtCapture.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (mContext.getPackageManager().hasSystemFeature(
       PackageManager.FEATURE_CAMERA)) { 
       Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       // i.putExtra("position",position); 
       posClicked = position; 
       ((Activity) mContext).startActivityForResult(i, 100); 
      } 
     } 
}); 

然後在活動創建活動結果

public void afterActivityResult(Bitmap bmp,.. extra){ 
    //do the need full 
} 

後,在適配器的方法結果

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(requestCode==100&&resultCode==RESULT_OK){ 
     Bitmap b = (Bitmap)data.getExtras().get("data"); 
     int position = (int)data.getExtras().get("position"); 
     POSMQty p = arrPOSMInstore.get(position); 
     p.setBitmap(b); 
     yourAdapter.afterActivityResult(...); 

}}

您也可以爲clickedPosition方法getter方法。

在適配器

public int getClickedPosition(){ 
    return posClicked; 
} 

,並使用它像

adapter.getClickedPosition() 
在您的活動

+0

那麼,我可以在我的活動中獲得位置嗎? – sss1

+0

爲你編輯我的答案。 Upvote並標記正確,如果有幫助。 –

相關問題