انجمن سایت کلیدستان


رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
نوشتن متغیر در سطح کلاس (در برنامه نویسی اندروید)

نوشتن متغیر در سطح کلاس (در برنامه نویسی اندروید)

#6
(۱۳۹۳/۱۲/۲۲, ۰۳:۳۹ ق.ظ)'داش بهروز' نوشته: دوست عزیز همون طور که آدمین جان گفت شما اشتباهتون این که توی دستور زیر از شمارنده i استفاده کردید..

کد پی‌اچ‌پی:
bitmapBitmapFactory.decodeResource(getResources(),imageAdapter.mThumbIds[i]);[/i

وچون مقدار i برابر صفر بوده در سطح کلاس پس اصولا باید همان عکس اول ارسال شود..حالا چه کنیم.بهترین روش اینه که onpagerLisinerاستفاده کنید..دقت کنید به نظر من بهترین روش چون میشود از روش کوتاه تر استفاده کرد اما توی خیلی موارد و Sdkمختلف ممکن است کار نکند..
ابتدا در سطح اصلی کلاس یه متغییر سراسری مثل زیر بسازید.

کد پی‌اچ‌پی:
[i]int Base_position=0;[/i

و سپس روی viewPager خودتون یه شنونده pagerLisinear تعریف کنید..این شنونده زمانی صدا زده میشود که صفحه تغییر کند..
کد پی‌اچ‌پی:
[i]    viewPag.setOnPageChangeListener(new OnPageChangeListener() {
                    
                    @
Override
                    
public void onPageSelected(int position) {
                        
// TODO Auto-generated method stub
                        
Base_position=position;
                    }
                    
                    @
Override
                    
public void onPageScrolled(int arg0float arg1int arg2) {
                        
// TODO Auto-generated method stub
                        
                    
}
                    
                    @
Override
                    
public void onPageScrollStateChanged(int arg0) {
                        
// TODO Auto-generated method stub
                        
                    
}
                })
[/
i

در کد بالا چندین متد overrideشده است ..که یکی از این متدها باید بهش توجه کنید متد زیر است
کد پی‌اچ‌پی:
[i]@Override
                    
public void onPageSelected(int position) {
                        
// TODO Auto-generated method stub
                        
Base_position=position;
                    }[/
i

این متد یه ورودی position داره که شماره همون صفحه ای است که در آن قرار داریم..داخل بدنه این شماره رو به متغیرBase_position پاس دادیم..
حالا میتونید این متغییر رو جانشین i کنید.

کد پی‌اچ‌پی:
[i]bitmapBitmapFactory.decodeResource(getResources(),imageAdapter.mThumbIds[Base_position]); [/i

امیدوارم توضیحات کامل بوده باشه و مشکلتون حل بشه.


ممنون که پاسخم رو دادید.
این روش کار میکنه.

همه ی کار هایی رو که گفتید رو انجام دادم و کدم شو این:
کد پی‌اچ‌پی:
package com.microprogram.postallcard;

import android.app.ActionBar;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

import static com.microprogram.postallcard.R.id.pager;


public class 
Eshgh_ImageShow extends ActionBarActivity {

    @
Override
    
protected void onCreate(Bundle savedInstanceState) {
        
super.onCreate(savedInstanceState);
        
setTitle("عشقولانه");
        
setContentView(R.layout.activity_eshgh__image_show);

        
Intent p getIntent();
        
Button btn1 = (ButtonfindViewById(R.id.share);
        final 
ViewPager viewPag = (ViewPagerfindViewById(pager);
        final 
int position p.getExtras().getInt("id");
        final 
Eshgh_Adapter imageAdapter = new Eshgh_Adapter(this);
        List<
ImageViewimages = new ArrayList<ImageView>();

        for (
int i 0imageAdapter.getCount(); i++){
            
ImageView imageView= new ImageView (this);
            
imageView.setImageResource(imageAdapter.mThumbIds[i]);
            
imageView.setScaleType(ImageView.ScaleType.CENTER);
            
images.add(imageView);
        }

        
ImagePagerAdapter pagerAdapter = new ImagePagerAdapter(images);
        
viewPag.setAdapter(pagerAdapter);
        
viewPag.setCurrentItem(position);



        }

    @
Override
    
public boolean onCreateOptionsMenu(Menu menu) {
        
// Inflate the menu; this adds items to the action bar if it is present.
        
getMenuInflater().inflate(R.menu.menu_eshgh__image_showmenu);
        return 
true;
    }

    @
Override
    
public boolean onOptionsItemSelected(MenuItem item) {
        
Intent p getIntent();
        
int position p.getExtras().getInt("id");
        
ViewPager viewPag = (ViewPagerfindViewById(pager);
        
Eshgh_Adapter imageAdapter = new Eshgh_Adapter(this);
        switch (
item.getItemId()) {

            case 
R.id.share:

                
viewPag.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                    public 
void onPageScrollStateChanged(int state) {}
                    public 
void onPageScrolled(int positionfloat positionOffsetint positionOffsetPixels) {}



                    
int Base_position=0;

                    public 
void onPageSelected(int position) {
                        
Base_position position;         }



                });

                
Bitmap bitmap;
                
OutputStream output;
                
Intent share;

                
bitmapBitmapFactory.decodeResource(getResources(),imageAdapter.mThumbIds[Base_position]);
                
File filepath Environment.getExternalStorageDirectory();
                
File dir = new File (filepath.getAbsolutePath() + "/.PostallCard/");
                
dir.mkdirs();
                
File file = new File(dir"Eshgh.png");

                try {

                    
share = new Intent(Intent.ACTION_SEND);
                    
share.setType("image/jpeg");
                    
output = new FileOutputStream(file);
                    
bitmap.compress(Bitmap.CompressFormat.PNG100output);
                    
output.flush();
                    
output.close();
                    
Uri uri Uri.fromFile(file);
                    
share.putExtra(Intent.EXTRA_STREAM,uri);
                    
startActivity(Intent.createChooser(share"Share Image"));
                }
                catch(
Exception e){
                    
e.printStackTrace();
                }

                return 
true;
            case 
R.id.favorite:
                return 
true;

            default:
                return 
super.onOptionsItemSelected(item);

        }
    }

فقط یه مشکلی دارم اینه که من کد های اشتراک گذاری رو باید کجا قرار بدم؟
چون در این حالتی که من گذاشتم 
کد پی‌اچ‌پی:
bitmapBitmapFactory.decodeResource(getResources(),imageAdapter.mThumbIds[Base_position]); 
قسمت Base_position ارور میده و میگه نمیشناستش .
همه راه هایی رو که میتونستم امتحان کردم ولی بازم نشد.
یه بارم کد اشتراک گذاری رو توی این قسمت کذاشتم همه چیز درست بود ولی مشکل این جا بود که هر وقت صفحه رو عوض میکردم صفحه اشتراک گذاری باز میشد:
کد پی‌اچ‌پی:
public void onPageSelected(int position) {
                        
Base_position position;    
     } 


 
پاسخ


پیام‌های این موضوع
RE: نوشتن متغیر در سطح کلاس (در برنامه نویسی اندروید) - توسط mfn100 - ۱۳۹۳/۱۲/۲۵, ۰۹:۴۴ ب.ظ

پرش به انجمن:


کاربران در حال بازدید این موضوع: 2 مهمان