ورود

View Full Version : تنظیم دستی موقعیت یک المان در آرایه لیست ویو



voltan
جمعه 10 خرداد 1392, 11:31 صبح
سلام
توی کد اکتیویوتی زیر

package com.example.test;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class ListfileActivity extends Activity {

public int MainId;
private ListView lv;
private ArrayList<String> listview_array = new ArrayList<String>();

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Bundle extras = getIntent().getExtras();
if (extras != null) {
MainId = extras.getInt("cid");
}

// Read page from DB
DatabaseHandler db = new DatabaseHandler(this);
List<Item> items = db.getAllItemCid(MainId);

// Add to array
for (Item cn : items) {
listview_array.add("ID : " + cn.getId() + " Title : " + cn.getTitle());
}

// Make list view
lv = (ListView) findViewById(R.id.listView1);
lv.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listview_array));
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
Intent item = new Intent(getApplicationContext(), ItemfileActivity.class);
item.putExtra("id", arg2);
startActivity(item);
}
});
}
}

من خیلی راحت یه آی دی رو تو اکتیویتی قبلی دستی ست شده اینجا میگیرم و بر اساس اون یه کوئری میزینم و اطلاعات مورد نیاز رو از دیتابیس میگیرم. بعد با این اطلاعات یه لیست درست میکنم و لیست رو هم نمایش میدم.

این لیست یه رویداد onItemClick هم داره که قراره با کلیک روی اون برم به صفحه آیتم این لیست ( فرض کنید لست یه سری خبر که با کلیک روی عنوان برم به متن خبر ) ، همه هم از دیتابیس خونده میشه.

با putExtra خیلی ساده میتونم آی دی رو بفرستم به اکتیویتی بعدی. فقط مشکل اینه که در قسمت زیر
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3)
arg2 در اصل میشه پوزیشن اون المان خاص در آرایه ای که ازش لیست رو ساختیم که به ترتیب از صفر مرتیب میشه.

در حالی که من میخوام پوزیشن هر المان آرایه رو آی دی اون المان ست کنم که بعدا از روی همون آی دی کوئری بزنم و متن خبر رو بگیرم.

المان ها رو هم اینجا ست میکنم توی آرایه

for (Item cn : items) {
listview_array.add("ID : " + cn.getId() + " Title : " + cn.getTitle());
}

با استفاده از listview_array.add . مشکل اینه که این متد .add اجازه نمیده پوزیشن رو هم اد کنم و فقط میتونم عنوان رو اد کنم.

چطوری میتونم پوزیشن رو تنظیم کنم برای آرایه؟

سعی کردم از این متد استفاده کنم ولی کد خروجی اجرا نشد ( با اعمال تغییرات لازم در کد )
listview_array[cn.getId()] = cn.getTitle();

اگه ممکنه راهنمایی کنید که کد بالا رو چطوری باید اصلاح کنم. آیا اصلا از روش صحیحی برای این کار استفاده کرد یا روش صحیح چیز دیگه ای

با تشکر

voltan
دوشنبه 13 خرداد 1392, 09:45 صبح
هیچ پیشنهادی نیست؟

hamid_hr
دوشنبه 13 خرداد 1392, 13:05 عصر
با اين ميتوني مقدار داخل ليستو كه روش كليك شده بگيري
lv.getItemAtPosition(arg3);
بعد با يك پردازش رشته اي اي دي رو در بياري

Nevercom
سه شنبه 14 خرداد 1392, 01:39 صبح
شما یا باید آرایه ای از id ها داشته باشید که متناسب با عناصر موجود در ListView باشه، یعنی مثلاً عنصر شماره ی ۵ آرایه، حاوی id مربوط به سطر پنجم لیست ویو باشه که خیلی راحت میتونید با استفاده از position هر row مقدار id مربوطه رو بدست بیارید.

روش دیگه هم این هست که یک Adaptor برای مدیریت نمایش داده های لیست ویو ایجاد کنید و به یکی از عناصر موجود در هر سطر (مثلاً TextView) داده ای رو متصل کنید، اینکار با تابع setTag انجام میشه.
در نهایت وقتی روی هر سطر از لیست ویو کلیک شد، کافیه داده ی متصل شده به اون View رو با تابع getTag بدست بیارید که در این مورد اون داده میشه id مربوط به اون سطر

voltan
پنج شنبه 16 خرداد 1392, 13:10 عصر
سلام

ممنون از راهنمایی. با روش دو آرایه مشکل حل شد. کد زیر :



package com.activity.test;

import java.util.ArrayList;
import java.util.List;

import com.database.shobadebaz.DatabaseHandler;
import com.database.shobadebaz.Item;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class ListfileActivity extends Activity {

public int GetId;
public int SetId;

private ListView lv;
private ArrayList<String> listview_title = new ArrayList<String>();
private ArrayList<Integer> listview_id = new ArrayList<Integer>();

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);

Bundle extras = getIntent().getExtras();
if (extras != null) {
GetId = extras.getInt("cid");
}

// Read page from DB
DatabaseHandler db = new DatabaseHandler(this);
List<Item> items = db.getAllItemCid(GetId);

// Add to array
for (Item cn : items) {
listview_title.add(cn.getTitle());
listview_id.add(cn.getId());
}

// Make list view
lv = (ListView) findViewById(R.id.listView1);
lv.setAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, listview_title));
lv.setTextFilterEnabled(true);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
SetId = listview_id.get(arg2);

Intent item = new Intent(getApplicationContext(),
ItemfileActivity.class);
item.putExtra("id", SetId);
startActivity(item);
}
});
}
}