PDA

View Full Version : کمک در listView



vahid_pitok
جمعه 13 اردیبهشت 1392, 12:14 عصر
با سلام خدمت دوستان عزیز

list view من اتصالش و نمایش داده هاش درسته ولی وقتی روش کلیک می کنم وارد Listener نمیشه و عکسالعملی انجام نمیده
لطفا راهنمایی کنید


listView = (ListView) findViewById(R.id.listView);

listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
Toast.makeText(getBaseContext(), position, Toast.LENGTH_SHORT)
.show();
Log.i(TAG, "item " + position + " clicked.");

TextView tv = (TextView) v.findViewById(R.id.tv_id);
Log.i(TAG, ">> " + tv.getText());
idcustomer=id;
customerinfoactiv();

refreshList();
}
});



@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;

if (convertView == null) {
convertView = myInflater.inflate(R.layout.list_adapter, null);
holder = new ViewHolder();
holder.tv_id = (TextView) convertView.findViewById(R.id.tv_id);
holder.tv_name = (TextView) convertView.findViewById(R.id.tv_name);
holder.tv_credite = (TextView) convertView.findViewById(R.id.tv_credite);
holder.tv_remaincredite = (TextView) convertView.findViewById(R.id.tv_remaincredite);
holder.img_status= (ImageView) convertView.findViewById(R.id.img_status);
holder.tv_address = (TextView) convertView.findViewById(R.id.tv_address);

convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}

holder.tv_id.setTag(list.get(position).getIdToStri ng());
holder.tv_name.setText(list.get(position).getCusto merName());
holder.tv_credite.setText(list.get(position).getCr edit());
holder.tv_remaincredite.setText(list.get(position) .getRemainCredit());
//holder.img_status.setVisibility(Integer.parseInt(l ist.get(position).getState()));
/*String enbale=list.get(position).getState();
if (Integer.parseInt(enbale) ==1) {
holder.img_status.setVisibility(visibility)
}
else {
holder.img_status.setEnabled(true);
}

*/
holder.tv_address.setText(list.get(position).getAd dress());
return convertView;
}

static class ViewHolder {
TextView tv_id;
TextView tv_name;
TextView tv_credite;
TextView tv_remaincredite;
ImageView img_status;
TextView tv_address;
}


ممنون از راهنماییتون

darkenerboy
جمعه 13 اردیبهشت 1392, 21:45 عصر
در متد getView
setOnItemClickListener رو برای convertView بنویس
موفق باشی

vahid_pitok
جمعه 13 اردیبهشت 1392, 22:51 عصر
ممنون
میشه لطفا بیشتر راهنمایی کنی؟

mahdi1373
پنج شنبه 19 اردیبهشت 1392, 00:25 صبح
باید convert view ات از نوع LinearLayout یا مثلا TextView باشه تا رویداد onItemSelectedListener در هنگام کلیک، برای ListView فراخوانی بشه. یعنی getView اگر یه همچین مواردی رو برگردونه، این رویداد برای ListView ارسال میشه. مثلا اگر RelativeLayout باشه، رویداد ارسال نمیشه.
اگر نمیخوای، باید از راهی که دوستمون قرار دادن استفاده کنی.

vahid_pitok
پنج شنبه 19 اردیبهشت 1392, 16:49 عصر
ممنون از راهنمایی همه ی دوستان ولی میشه با یک نمونه کد توضیح بدید؟
هر چی سرچ کردم به نتیجه ای نرسیدم

vahid_pitok
پنج شنبه 19 اردیبهشت 1392, 17:25 عصر
باید convert view ات از نوع LinearLayout یا مثلا TextView باشه تا رویداد onItemSelectedListener در هنگام کلیک، برای ListView فراخوانی بشه. یعنی getView اگر یه همچین مواردی رو برگردونه، این رویداد برای ListView ارسال میشه. مثلا اگر RelativeLayout باشه، رویداد ارسال نمیشه.
اگر نمیخوای، باید از راهی که دوستمون قرار دادن استفاده کنی.

ممنون از راهنماییت دوست عزیز

من setOnItemClickListener رو برای convertView نوشتم چطور باید id لینک انتخاب شده رو برگردونم ؟

public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;

if (convertView == null) {
convertView = myInflater.inflate(R.layout.list_adapter, null);
holder = new ViewHolder();
holder.tv_id = (TextView) convertView.findViewById(R.id.tv_id);
holder.tv_name = (TextView) convertView.findViewById(R.id.tv_name);
holder.tv_credite = (TextView) convertView.findViewById(R.id.tv_credite);
holder.tv_remaincredite = (TextView) convertView.findViewById(R.id.tv_remaincredite);
//holder.btnimg_status= (ImageView) convertView.findViewById(R.id.img_status);
holder.tv_address = (TextView) convertView.findViewById(R.id.tv_address);

convertView.setTag(holder);

convertView.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
v.getId();

Log.i(TAG, "item ITEMclicked.");
}
});
} else {
holder = (ViewHolder) convertView.getTag();
}

holder.tv_id.setTag(list.get(position).getIdToStri ng());
holder.tv_name.setText(list.get(position).getCusto merName());
holder.tv_credite.setText(list.get(position).getCr edit());
holder.tv_remaincredite.setText(list.get(position) .getRemainCredit());
//holder.btnimg_status.setText(list.get(position).ge tState());
holder.tv_address.setText(list.get(position).getAd dress());
return convertView;
}

mahdi1373
سه شنبه 24 اردیبهشت 1392, 23:36 عصر
اگر می خواید ازین روش استفاده کنید، بهتره از Interface استفاده کنید.
ولی پیشنهاد من، همونه که قبلا گفتم. لطفا کد قسمتی که adpter رو برای listview ست می کنید رو بذارید تا بتونم بهتر راهنماییتون کنم...

vahid_pitok
پنج شنبه 26 اردیبهشت 1392, 09:01 صبح
کد زیر تمامی کد list adapter هست

import java.util.List;

import com.mob.neuron.sales.R;
import com.mob.neuron.sales.classes.Customer;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class ListAdapter extends BaseAdapter {

private final String TAG = "*** ListAdapter ***";

private LayoutInflater myInflater;
private List<Customer> list;

public ListAdapter(Context context) {
myInflater = LayoutInflater.from(context);

Log.i(TAG, "Adapter setuped successfully.");
}

public void setData(List<Customer> list) {
this.list = list;

Log.i(TAG, "Data passed to the adapter.");
}

@Override
public int getCount() {
return list.size();
}

@Override
public Object getItem(int position) {
return null;
}

@Override
public long getItemId(int position) {
return 0;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;

if (convertView == null) {
convertView = myInflater.inflate(R.layout.list_adapter, null);
holder = new ViewHolder();
holder.tv_id = (TextView) convertView.findViewById(R.id.tv_id);
holder.tv_name = (TextView) convertView.findViewById(R.id.tv_name);
holder.tv_credite = (TextView) convertView.findViewById(R.id.tv_credite);
holder.tv_remaincredite = (TextView) convertView.findViewById(R.id.tv_remaincredite);
//holder.btnimg_status= (ImageView) convertView.findViewById(R.id.img_status);
holder.tv_address = (TextView) convertView.findViewById(R.id.tv_address);

convertView.setTag(holder);

convertView.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {

switch (v.getId()) {
case R.id.tv_id:
Log.e("click position ", "" + position);
break;
}
Log.i(TAG, "item ITEMclicked."+list.get(position).getIdToString()+ list.get(position).getCustomerName());
}
});
} else {
holder = (ViewHolder) convertView.getTag();
}

holder.tv_id.setTag(list.get(position).getIdToStri ng());
holder.tv_name.setText(list.get(position).getCusto merName());
holder.tv_credite.setText(list.get(position).getCr edit());
holder.tv_remaincredite.setText(list.get(position) .getRemainCredit());
//holder.btnimg_status.setText(list.get(position).ge tState());
holder.tv_address.setText(list.get(position).getAd dress());
return convertView;
}

static class ViewHolder {
TextView tv_id;
TextView tv_name;
TextView tv_credite;
TextView tv_remaincredite;
ImageView btnimg_status;
TextView tv_address;
}

}


و کد زیر مربوط به activity


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.customer);
// }
adapter = new ListAdapter(this);
dbHandler = new DatabaseHandler(this);

listView = (ListView) findViewById(R.id.listView);

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
Toast.makeText(getBaseContext(), position, Toast.LENGTH_SHORT)
.show();
Log.i(TAG, "item " + position + " clicked.");

TextView tv = (TextView) v.findViewById(R.id.tv_id);
Log.i(TAG, ">> " + tv.getText());
Intent i = new Intent("com.mob.neuron.salescustomerinfo");
i.putExtra("idcustomer", tv.getText().toString());
startActivityForResult(i, 1);
refreshList();
}
});
}

@Override
protected void onResume() {

super.onResume();
dbHandler.open();
refreshList();
}
@Override
protected void onPause() {

super.onPause();
dbHandler.close();
}
private void refreshList() {

list=dbHandler.getAllcustomres();
adapter.setData(list);
listView.setAdapter(adapter);
}


پیشاپیش ممنون از راهنماییت

mahdi1373
جمعه 27 اردیبهشت 1392, 14:38 عصر
توی R.layout.list_adapter بیرونی ترین layout رو LinearLayout بذار. یعنی یه linearlayout باشه که توش کل محتوای فایل layout باشه.

vahid_pitok
جمعه 27 اردیبهشت 1392, 18:19 عصر
روی Linearlayout هست اینم کدش ولی کار نمیکنه

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >


<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right" >

<EditText
android:id="@+id/tv_id"
android:layout_width="0dp"
android:layout_height="6dp"
android:layout_weight="1"
android:ems="10"
android:visibility="invisible" android:inputType="numberSigned">

<requestFocus />
</EditText>






<ImageView
android:id="@+id/img_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:src="@drawable/add_user"/>

<EditText
android:id="@+id/tv_remaincredite"
android:layout_width="70dp"
android:enabled="false"
android:layout_height="wrap_content" android:inputType="numberSigned"/>
<EditText
android:id="@+id/tv_credite"
android:layout_width="70dp"
android:enabled="false"
android:layout_height="wrap_content" android:inputType="numberSigned"/>
<EditText
android:id="@+id/tv_name"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:enabled="false" android:inputType="textPersonName">
</EditText>

</LinearLayout>



<EditText
android:id="@+id/tv_address"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:enabled="false" android:inputType="textMultiLine">

</EditText>

</LinearLayout>