بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
مشکل با Base Adapter در لیست ویو
سلام دوستان
من با استفاده از BaseAdapter (با کمک این لینک برای لیست ویو خودم یه سرچ درست کردم و به خوبی کار میکنه منتها مشکل اینجاس که وقتی می خوام برای لیست ویو یک لیسنر قرار بدم که مثلا روی هر آیتمی کلیک شد یک دیالوگ باکس رو نشون بده بهم این ارور میده :

اینم کد مربوط به ادپتر من :
package fileformat.ehsan.com.fileformat;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
public class AdapterNote extends BaseAdapter implements Filterable {
private ArrayList<Product> mOriginalValues;
private ArrayList<Product> mDisplayedValues;
LayoutInflater inflater;
public AdapterNote(Context context, ArrayList<Product> mProductArrayList) {
this.mOriginalValues = mProductArrayList;
this.mDisplayedValues = mProductArrayList;
inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return mDisplayedValues.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
private class ViewHolder {
LinearLayout llContainer;
LinearLayout layoutRoot;
TextView tvName,tvPrice;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.row, null);
holder.llContainer = (LinearLayout)convertView.findViewById(R.id.llContainer);
holder.tvName = (TextView) convertView.findViewById(R.id.txtTitle);
holder.tvPrice = (TextView) convertView.findViewById(R.id.txtDesc);
holder.layoutRoot = (LinearLayout)convertView.findViewById(R.id.layoutRoot);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.tvName.setText(mDisplayedValues.get(position).name);
holder.tvPrice.setText(mDisplayedValues.get(position).price+"");
holder.llContainer.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Dialog dialog =new Dialog(G.currentActivity);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.activity_edit);
dialog.show();
}
});
return convertView;
}
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint,FilterResults results) {
mDisplayedValues = (ArrayList<Product>) results.values;
notifyDataSetChanged();
}
@Override
protected Filter.FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
ArrayList<Product> FilteredArrList = new ArrayList<Product>();
if (mOriginalValues == null) {
mOriginalValues = new ArrayList<Product>(mDisplayedValues);
}
if (constraint == null || constraint.length() == 0) {
// set the Original result to return
results.count = mOriginalValues.size();
results.values = mOriginalValues;
} else {
constraint = constraint.toString().toLowerCase();
for (int i = 0; i < mOriginalValues.size(); i++) {
String data = mOriginalValues.get(i).name;
if (data.toLowerCase().contains((constraint.toString()))){
FilteredArrList.add(new Product(mOriginalValues.get(i).name,mOriginalValues.get(i).price));
}
}
// set the Filtered result to return
results.count = FilteredArrList.size();
results.values = FilteredArrList;
}
return results;
}
};
return filter;
}
}
البته وقتی همین کد رو داخل کلاس MainActivity قرار میدم و بجای G.currentActivity عبارت MainActivity.this رو میذارم برنامه درست کار میکنه !
ممنون میشم راهنمایی کنید :)
0
0
احتمالا شما باید از context استفاده کنید حل میشه (9 سال پیش)
برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال
Shadow
9 سال پیش
+1
0
این کد رو اصلاح کنید :
private Context context;
public AdapterNote(Context context, ArrayList<Product> mProductArrayList) {
this.mOriginalValues = mProductArrayList;
this.mDisplayedValues = mProductArrayList;
inflater = LayoutInflater.from(context);
this.context = context;
}
Dialog dialog =new Dialog(context);
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .