2012-05-04 38 views
4

我想使用startActivityForResult從ArrayAdapter類調用另一個意圖,但我不能這樣做。這裏是我的代碼。如何在ArrayAdapter類的getView方法中使用startActivityForResult?

一個ArrayAdapter類構造函數

public QsShareManagerAdapter(Context context, String[] values, Long[] size,String[] time, 
     boolean isRoot, Boolean[] attrdir, ArrayList<Boolean> selected,boolean type, 
     LinearLayout linearLayout,String SHARE,String qsUsername) 
{ 
    super(context, R.layout.listlayout, values); 
    this.context = context; 
    this.values = values; 
    this.size = size; 
    this.time=time; 
    this.isRoot = isRoot; 
    this.attrdir = attrdir; 
    this.selected = selected; 
    this.type=type; 
    this.linearLayout=linearLayout; 
    this.SHARE=SHARE; 
    this.qsUsername=qsUsername; 
} 





    @Override 
public View getView(final int position, View convertView, ViewGroup parent) 
{ 
    String spliter = "/"; 
    tag=SHARE.split(spliter); 

    LayoutInflater inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View rowView = inflater.inflate(R.layout.listlayout, parent, false); 

    // 
    addFiles=(Button)linearLayout.findViewById(R.id.add_files); 
    manageUser=(Button)linearLayout.findViewById(R.id.manage_users); 
    deleteSharedFolder=(Button)linearLayout.findViewById(R.id.delete_shared_folder); 
    copyFiles=(Button)linearLayout.findViewById(R.id.copy); 
    deleteFiles=(Button)linearLayout.findViewById(R.id.delete_files); 

    addFiles.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
       Intent intent=new Intent(context,QsFileSelector.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); ; 
       intent.putExtra(QsFileSelector.SELECTED_FILES,existing_seletedFile); 
       intent.putExtra(QsFileSelector.FILE_OR_DIRECTORY, tag[6]); 
       startActivityForResult(intent); 
      Toast.makeText(context, "Add Files", Toast.LENGTH_SHORT).show(); 
     } 
    }); 

    manageUser.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Toast.makeText(context, "Manage User", Toast.LENGTH_SHORT).show();    
     } 
    }); 

    deleteSharedFolder.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
       boolean status=serverURL.folderRequestResponseURI("DELETED_CREATOR", tag[6], qsUsername, tag[5], null, ""); 
       if(status){ 
        Toast.makeText(context, "Delete Share Folder", Toast.LENGTH_SHORT).show(); 
       } 
     } 
    }); 

    copyFiles.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Toast.makeText(context, "Copy", Toast.LENGTH_SHORT).show(); 
     } 
    }); 

    deleteFiles.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Toast.makeText(context, "Delete", Toast.LENGTH_SHORT).show(); 
     } 
    }); 


    TextView textView = (TextView) rowView.findViewById(R.id.txtview); 
    ImageView imageView = (ImageView) rowView.findViewById(R.id.icon); 
    TextView sizeView = (TextView) rowView.findViewById(R.id.size); 

    final CheckBox checkbox = (CheckBox) rowView 
      .findViewById(R.id.checkbox); 

    String s = values[position]; 

    checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() 
    { 
     int postion=position; 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
     { 
      // TODO Auto-generated method stub 
      if(isChecked){ 
       addToList(values[postion],true); 
      }else{ 
       addToList(values[postion],false);     
      } 
     } 
    }); 
    rowView.setTag(s); 
    if (!values[position].contains("my_shared_folder") && isRoot && type) 
    { 
     s = values[position] + " 's Shared Folder"; 
     textView.setText(s); 
    } 
    else 
    { 
     textView.setText(values[position]); 
    } 

    if (size.length != 0) 
    { 
     double sizeinKb = size[position]/1024; 

     if (sizeinKb > 1024) { 
      double sizeinMb = sizeinKb/1024; 
      sizeView.setText(Double.toString(round(sizeinMb, 2, 
        BigDecimal.ROUND_HALF_UP)) + " MB | "+time[position]); 
     } 

     else if (sizeinKb > 1048576) { 
      double sizeinGB = sizeinKb/(1024 * 1024); 
      sizeView.setText(Double.toString(round(sizeinGB, 2, 
        BigDecimal.ROUND_HALF_UP)) + " GB | "+time[position]); 
     } 

     else { 
      sizeView.setText(Double.toString(round(sizeinKb, 2, 
        BigDecimal.ROUND_HALF_UP)) + " KB | "+time[position]); 
     } 

    } 

    if (attrdir[position]) 
    { 
     imageView.setImageResource(R.drawable.icon_folder_logo); 
     sizeView.setText(""); 
    } 
    else 
    { 
     checkbox.setVisibility(View.VISIBLE); 
     if (s.contains(".mp3") || s.contains(".wav")) 
     { 
      imageView.setImageResource(R.drawable.audio); 
     } 
     else if (s.contains(".zip") || s.contains(".rar") 
       || s.contains(".tar")) 
     { 
      imageView.setImageResource(R.drawable.zip); 
     } 
     else if (s.contains(".db")) 
     { 
      imageView.setImageResource(R.drawable.db_icon); 
     } 
     else if ((s.contains(".png")) || (s.contains(".jpg"))) 
     { 
      imageView.setImageResource(R.drawable.imagview); 
     } 
     else if ((s.contains(".doc")) || (s.contains(".docx"))) 
     { 
      imageView.setImageResource(R.drawable.doc); 
     } 
     else if ((s.contains(".xls")) || (s.contains(".xlsx"))) 
     { 
      imageView.setImageResource(R.drawable.excel); 
     } 
     else if ((s.contains(".pdf"))) 
     { 
      imageView.setImageResource(R.drawable.pdf); 
     } 
     else 
     { 
      imageView.setImageResource(R.drawable.unknown); 
     } 
    } 
    /* 
    * for(int i=0;i<size.size();i++){ 
    * sizeView.setText(Integer.toString(size.get(i))); } 
    */  

    if(fileList.contains(values[position]) && checkStatus.contains(true)){ 
     linearLayout.setVisibility(View.VISIBLE); 
     checkbox.setChecked(true); 
    } 

    if(fileList.size() == 0){ 
     linearLayout.setVisibility(View.GONE); 
    } 
    checkbox.setTag(values[position]); 
    return rowView; 
} 

回答

5
addFiles.setFocusable(false); 

我想你應該改變ContextActivity ......在你的適配器構造改變它... activity.startActivityForResult(意向,位置);

+0

它不工作。我已經這樣做了。 –

+0

爲什麼?有什麼錯誤?請參閱我的更新回答 –

+0

對於類型Context,未定義方法startActivityForResult(Intent,int)。這是你更新後的錯誤。 –

0

爲什麼你不能?你有上下文,使用它。

更新:必須將其轉換爲活動或更改類型。

+0

這不是一個答案,發表評論,而不是這個。 –

+0

我知道我有上下文使用此上下文我可以訪問context.startActivity,context.startService但我無法訪問context.startActivityForResult。 –

+0

@NeverQuit迴歸問題,不是一個真正的問題。 –

8

使用您擁有的context並將該上下文轉換爲活動。像:

((Activity)context).startActivityForResult(intent); 
+0

@Downvoter - 謹慎解釋? – MByD

+0

發生轉換異常。 ? – chhameed

0

使用

getApplicationContext().startActivityForResult(intent); 
0

要做到這一點,你需要上下文

((活動)範圍內).startActivityForResult(意向,1);

,如果你只需要啓動活動然後做這樣的

context.startActivityForResult(意向,1);

相關問題