Как использовать нестатический способ "getSystemService" в пользовательском адаптере?
В затмении Android, когда я хочу использовать нестатический метод "getSystemService", он показывает ошибку:
Невозможно создать статическую ссылку на нестатический метод getContext() из типа ArrayAdapter.
ArrayAddapter.java:
package ir.redreactor.app.Com.NovinEr;
import java.util.ArrayList;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
public class AdapterNote extends ArrayAdapter<StructNote> {
public AdapterNote(ArrayList<StructNote> array) {
super(G.context, R.layout.adapter_notes, array);
}
private static class ViewHolder {
public ViewGroup LayoutRt;
public TextView txtTitle;
public TextView txtSort;
public TextView txtTableName;
public TextView txtID;
public TextView txtpos;
public TextView txtDetail;
public ViewHolder(View view) {
txtTitle = (TextView) view.findViewById(R.id.txtTitleAN);
txtSort = (TextView) view.findViewById(R.id.txtSortAN);
txtTableName = (TextView) view.findViewById(R.id.txtTableNameAN);
txtID = (TextView) view.findViewById(R.id.txtIDAN);
txtpos = (TextView) view.findViewById(R.id.txtpos);
txtDetail = (TextView) view.findViewById(R.id.txtDetailAN);
LayoutRt = (ViewGroup) view.findViewById(R.id.layout_Rt);
}
private void copy(String strdata) {
android.text.ClipboardManager clipboard = (android.text.ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE);
clipboard.setText(strdata);
}
public void fill(ArrayAdapter<StructNote> Adapter, StructNote Item, final int position) {
txtTitle.setText(Item.title);
txtDetail.setText(Item.detail);
txtSort.setText(Item.Sort.toString());
txtTableName.setText(Item.nameOfTable);
txtID.setText(Item.intID.toString());
txtpos.setText("" + position);
LayoutRt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
copy(txtTitle.getText().toString() + "\n" + txtDetail.getText().toString());
}
});
}
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
StructNote item = getItem(position);
final ViewHolder holder;
if (convertView == null) {
convertView = G.inflater.inflate(R.layout.adapter_notes, parent, false);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.fill(this, item, position);
return convertView;
}
}
StructNote.java:
package ir.redreactor.app.Com.NovinEr;
import android.app.Activity;
import android.content.Context;
public class StructNote {
public String nameOfTable;
public Integer Sort;
public Integer intID;
public Boolean Favorite;
public String title;
public String detail;
}
G.java является классом Global Class
public class G extends Application {
// Creating Context
public static Context context;
// Creating Log
public static String LOG_TAG = "RR1";
public static String LOG_ERR = "NVR";
//Creating Current Activity Finder
public static Activity currentActivity;
@Override
public void onCreate() {
super.onCreate();
context = this.getApplicationContext();
}
}
Когда я использую "getSystemService" без "getContext()", он показывает мне ошибку ниже: метод getSystemService(String) не определен для типа AdapterNote.ViewHolder
------------------------------- Редактировать
спасибо, Рагхунандан, так что AdapterNote.java будет:
package ir.redreactor.app.Com.NovinEr;
import java.util.ArrayList;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
public class AdapterNote extends ArrayAdapter<StructNote> {
public LayoutInflater mInflater;
public static Context context;
public AdapterNote(ArrayList<StructNote> array, Context context) {
super(context, R.layout.adapter_notes, array);
mInflater = LayoutInflater.from(context);
this.context = context;
}
private static class ViewHolder {
public ViewGroup LayoutRt;
public TextView txtTitle;
public TextView txtSort;
public TextView txtTableName;
public TextView txtID;
public TextView txtpos;
public TextView txtDetail;
public ViewHolder(View view) {
txtTitle = (TextView) view.findViewById(R.id.txtTitleAN);
txtSort = (TextView) view.findViewById(R.id.txtSortAN);
txtTableName = (TextView) view.findViewById(R.id.txtTableNameAN);
txtID = (TextView) view.findViewById(R.id.txtIDAN);
txtpos = (TextView) view.findViewById(R.id.txtpos);
txtDetail = (TextView) view.findViewById(R.id.txtDetailAN);
LayoutRt = (ViewGroup) view.findViewById(R.id.layout_Rt);
}
private void copy(String strdata) {
android.text.ClipboardManager clipboard = (android.text.ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
clipboard.setText(strdata);
}
public void fill(ArrayAdapter<StructNote> Adapter, StructNote Item, final int position) {
txtTitle.setText(Item.title);
txtDetail.setText(Item.detail);
txtSort.setText(Item.Sort.toString());
txtTableName.setText(Item.nameOfTable);
txtID.setText(Item.intID.toString());
txtpos.setText("" + position);
LayoutRt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
copy(txtTitle.getText().toString() + "\n" + txtDetail.getText().toString());
}
});
}
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
StructNote item = getItem(position);
final ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.adapter_notes, parent, false);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.fill(this, item, position);
return convertView;
}
}
1 ответ
Решение
Передайте контекст конструктору адаптера
new AdapterNote(ArrayList<StructNote> array,ActivityName.this)
затем
LayoutInfalter mInflater;
Context context;
public AdapterNote(ArrayList<StructNote> array,Context context) {
super(context, R.layout.adapter_notes, array);
mInfalter = LayoutInfalter.from(context);
this.context =context;
}
затем
convertView = mInflater.inflate(R.layout.adapter_notes, parent, false);
затем
android.text.ClipboardManager clipboard = (android.text.ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE);