#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 из вашего класса адаптера.