Зачем делиться текстом, перемещенным в listview

#android #image #android-listview #android-view

#Android #изображение #android-listview #android-просмотр

Вопрос:

В следующем коде, когда я делюсь текстом с помощью img_share, не делитесь текстом в правильном положении, например, когда я делился текстом второго элемента, делился текстом пятого элемента! почему??

Я использовал адаптер для списка

Это мой адаптер:

 public class FaslhaAdapter1 extends ArrayAdapter<Faslha> {

Faslha fasl;
List<Faslha> faslha;
Context c;
public FaslhaAdapter1(Context c, List<Faslha> faslha) {
    super(c, android.R.id.content, faslha);
    this.c = c;
    this.faslha = faslha;

}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // laye mun ro tarif mikonim
    LayoutInflater vi = (LayoutInflater) c
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = vi.inflate(R.layout.itemlistsms, null);

    fasl = faslha.get(position);

    final TextView tvDastan = (TextView) view.findViewById(R.id.itm_namDastan);
    final ImageView img_share = (ImageView) view.findViewById(R.id.eshterak);

    tvDastan.setText(fasl.getOnvan());

    img_share.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            Intent shareIntent = new Intent(Intent.ACTION_SEND);
            shareIntent.setType("text/plain");
            shareIntent.putExtra(Intent.EXTRA_TEXT, fasl.getOnvan()   "n گروه مذهبی آسمان");
            c.startActivity(Intent.createChooser(shareIntent, "اشتراک... "));
            //code marbut be share ro vasatun tu site mizaram 
        }



    });


    return  view;

}

}
 

и это мой список:

 public class ListSms extends ListActivity {
DBAdapter db;
List<Faslha> faslha;

ListView lv, lst;
boolean isALL;
Context context;

String title;
Faslha faslhaa;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.listsms);
    context = this;
    lst = getListView();
    db = new DBAdapter(getBaseContext());
    db.open();
    Intent intent = getIntent();
    title  = intent.getStringExtra("TITLE");
    faslha = db.geta(title);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
}
public void CopyDB(InputStream inputStream, OutputStream outputStream)
        throws IOException {
    // ---copy 1K bytes at a time---
    byte[] buffer = new byte[1024];
    int length;
    while ((length = inputStream.read(buffer)) > 0) {
        outputStream.write(buffer, 0, length);
    }
    inputStream.close();
    outputStream.close();
}

public void refreshDisplay() {
    if(lst.getAdapter() == null){
    ArrayAdapter<Faslha> adapter = new FaslhaAdapter1(this, faslha);

    setListAdapter(adapter);
}
}
@Override
protected void onPause() {

    super.onPause();

    db.close();
}
@Override
protected void onResume() {

    super.onResume();
    db.open();
    refreshDisplay();
}
}
 

Ответ №1:

Потому что вы получаете его отсюда: fasl.getOnvan(). Ваше поле fasl меняется при заполнении представления адаптером, и оно равно последнему элементу на экране при нажатии кнопки.

простое решение:

     @Override
public View getView(int position, View convertView, ViewGroup parent) {
    // laye mun ro tarif mikonim
    LayoutInflater vi = (LayoutInflater) c
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = vi.inflate(R.layout.itemlistsms, null);

    final Faslha fasl = faslha.get(position); // make it final variable.

    final TextView tvDastan = (TextView) view.findViewById(R.id.itm_namDastan);
    final ImageView img_share = (ImageView) view.findViewById(R.id.eshterak);

    tvDastan.setText(fasl.getOnvan());

    img_share.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            Intent shareIntent = new Intent(Intent.ACTION_SEND);
            shareIntent.setType("text/plain");
            shareIntent.putExtra(Intent.EXTRA_TEXT, fasl.getOnvan()   "n گروه مذهبی آسمان");
            c.startActivity(Intent.createChooser(shareIntent, "اشتراک... "));
            //code marbut be share ro vasatun tu site mizaram 
        }



    });


    return  view;

}
 

и удалите field fasl из вашего класса адаптера.