2016-05-19 8 views
-1

これは私の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(); 
     } 
    } 
} 
+0

他のインテントにデータを渡すことができます。アダプタクラスはあなたを停止させません –

+0

?インテント(アクティビティまたはアダプタクラス)をどこに置くことができますか?アダプタにはすでにOpenDetailメソッドがあり、別のアクティビティを開き、インテントを送信する(位置を送信するだけです)ため、アクティビティから送信することは可能ですか?それを参照することが可能かもしれません... – Darmawansyah

答えて

0

あなたはもう少しブリーフィングする必要があります。あなたが提供したものに基づいています。 @PradeepCharanと同意する。意図が確実に呼び出して、単純で何回でも呼び出すことができます。この後

Intent intent=getIntent(); 

を、抽出物は、あなたがあなたを混乱さ何リユース

したいと思ってきた任意の値は、不思議です!

+0

このアクティビティから別のアクティビティへ、私は再びインテントを送りますか?しかし、私はどこに意図を入れたのですか? アクティビティクラスまたはアダプタクラスの場合(アダプタクラスの場合はonClickメソッドがあります)。私はすでに両方を試みたが失敗する? – Darmawansyah

+0

インテントは一度だけ送信します。そして、あなたが望むように、何度も取得してください。 "KEY"でデータを参照することができます。データを使用したいと思っているアクティビティーで、インテントを入手してください。それが目的を解決するならば、答えを受け入れる。 – 1ambharath

関連する問題