View Full Version : کمک در listView
  
vahid_pitok
جمعه 13 اردیبهشت 1392, 13: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, 22:45 عصر
در متد getView
setOnItemClickListener رو برای convertView بنویس
موفق باشی
vahid_pitok
جمعه 13 اردیبهشت 1392, 23:51 عصر
ممنون
میشه لطفا بیشتر راهنمایی کنی؟
mahdi1373
پنج شنبه 19 اردیبهشت 1392, 01:25 صبح
باید convert view ات از نوع LinearLayout یا مثلا TextView باشه تا رویداد onItemSelectedListener در هنگام کلیک، برای ListView فراخوانی بشه. یعنی getView اگر یه همچین مواردی رو برگردونه، این رویداد برای ListView ارسال میشه. مثلا اگر RelativeLayout باشه، رویداد ارسال نمیشه.
 اگر نمیخوای، باید از راهی که دوستمون قرار دادن استفاده کنی.
vahid_pitok
پنج شنبه 19 اردیبهشت 1392, 17:49 عصر
ممنون از راهنمایی همه ی دوستان ولی میشه با یک نمونه کد توضیح بدید؟
هر چی سرچ کردم به نتیجه ای نرسیدم
vahid_pitok
پنج شنبه 19 اردیبهشت 1392, 18: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
چهارشنبه 25 اردیبهشت 1392, 00:36 صبح
اگر می خواید ازین روش استفاده کنید، بهتره از Interface استفاده کنید.
ولی پیشنهاد من، همونه که قبلا گفتم. لطفا کد قسمتی که adpter رو برای listview ست می کنید رو بذارید تا بتونم بهتر راهنماییتون کنم...
vahid_pitok
پنج شنبه 26 اردیبهشت 1392, 10: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, 15:38 عصر
توی R.layout.list_adapter بیرونی ترین layout رو LinearLayout بذار. یعنی یه linearlayout باشه که توش کل محتوای فایل layout باشه.
vahid_pitok
جمعه 27 اردیبهشت 1392, 19: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>
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.