これは私のAndroidアプリケーションプロジェクトです。このアクティビティの前には、インテントで変数を送信するクラスがあります。だから今、別のアクティビティにもう一度送信したい、私はすでに(リストビューを作るために)アダプタクラスを作るので、Intent経由でもう送信できない。私は本当にこの配列を内部メソッドから外部メソッドに参照する方法はありますか?
活動と混同,,私を助け:
public class KantorActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_kantor);
getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
getSupportActionBar().setCustomView(R.layout.actionbar);
SearchView searchView = (SearchView) findViewById(R.id.searchView);
ListView listView = (ListView) findViewById(R.id.listView);
final Adapter adapter = new Adapter(this, getKantors());
listView.setAdapter(adapter);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
adapter.getFilter().filter(newText);
return false;
}
});
}
public ArrayList<Kantor> getKantors(){
Intent next = getIntent();
String[] namaKantor = next.getStringArrayExtra("namaKantor");
int [] gambar = next.getIntArrayExtra("gambar");
String[] desk = next.getStringArrayExtra("desk");
ArrayList<Kantor> kantors = new ArrayList<Kantor>();
Kantor k;
SharedPreferences sharedPreferences = getSharedPreferences
("id.ac.unsyiah.elektro.mobile.pservices", Context.MODE_PRIVATE);
this.namaKantor=namaKantor; //...?
this.gambar=gambar; //...?
this.desk=desk; //.....?
for (int i=0;i<namaKantor.length;i++){
k =new Kantor(namaKantor[i], gambar[i], desk[i]);
kantors.add(k);
}
return kantors;
}
String[]namaKantor; //HOW TO REFERENCE THIS ARRAY TO ARRAY inside method above??
String []desk; //HOW TO REFERENCE THIS ARRAY TO ARRAY inside method above??
int [] gambar; //HOW TO REFERENCE THIS ARRAY TO ARRAY inside method above??
}
アダプタ:
package id.ac.unsyiah.elektro.mobile.pservices;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
public class Adapter extends BaseAdapter implements Filterable {
Context c;
ArrayList<Kantor> kantors;
CustomFilter filter;
ArrayList<Kantor> filterList;
public Adapter(Context c,ArrayList<Kantor>kantors){
this.c=c;
this.kantors=kantors;
this.filterList=kantors;
}
@Override
public int getCount() {
return kantors.size();
}
@Override
public Object getItem(int pos) {
return kantors.get(pos);
}
@Override
public long getItemId(int pos) {
return 0;
}
@Override
public View getView(final int pos, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(convertView==null){
convertView=inflater.inflate(R.layout.model,parent,false);
}
//tampilan
ImageView img= (ImageView) convertView.findViewById(R.id.imgModel);
TextView tv = (TextView) convertView.findViewById(R.id.namaModel);
TextView tv2 = (TextView) convertView.findViewById(R.id.deskModel);
//set data
img.setImageResource(kantors.get(pos).getImg());
tv.setText(kantors.get(pos).getNama());
tv2.setText(kantors.get(pos).getDesk());
//itemClick
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
OpenDetail(pos);
}
});
return convertView;
}
//THIS IS FOR OPEN ANOTHER ACTIVITY VIA INTENT
private void OpenDetail (int pos) {
Intent next = new Intent(c, DetailActivity.class);
next.putExtra("pos", pos);
c.startActivity(next);
}
@Override
public Filter getFilter() {
if(filter==null){
filter=new CustomFilter();
}
return filter;
}
class CustomFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
if (constraint !=null & constraint.length()>0){
constraint=constraint.toString().toUpperCase();
ArrayList<Kantor> filters=new ArrayList<Kantor>();
for(int i=0;i<filterList.size();i++){
if (filterList.get(i).getNama().toUpperCase().contains(constraint)){
Kantor k = new Kantor(filterList.get(i).getNama(), filterList.get(i).getImg(),filterList.get(i).getDesk());
filters.add(k);
}
}
results.count=filters.size();
results.values=filters;
}
else{
results.count=filterList.size();
results.values=filterList;
}
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
kantors= (ArrayList<Kantor>) results.values;
notifyDataSetChanged();
}
}
}
他のインテントにデータを渡すことができます。アダプタクラスはあなたを停止させません –
?インテント(アクティビティまたはアダプタクラス)をどこに置くことができますか?アダプタにはすでにOpenDetailメソッドがあり、別のアクティビティを開き、インテントを送信する(位置を送信するだけです)ため、アクティビティから送信することは可能ですか?それを参照することが可能かもしれません... – Darmawansyah