2016-12-04 11 views
-1

表示機能はMain_activityクラスの下にあります。指定したディレクトリの下にあるすべてのファイルを表示します。私は、グリッド内のコンテンツを表示するGridAdapterと呼ばれる別のクラスを持って、今Main_Activityクラスのメソッドをヘルパークラスから呼び出す方法は?

protected void OnCreate(Bundle SavedInstanceState) 
{ 
..//other code 
display(path) 
} 

public void display(String path) 
{ 
    try { 
    File folderX = new File(path); 
    ActionBar actionBar = getSupportActionBar(); 
    actionBar.setTitle(folderX.getParentFile().getName() + "/" + folderX.getName()); 

    final File[] folderXCHILD = folderX.listFiles(); 
    Arrays.sort(folderXCHILD, new FileComparator()); 
    GridView gridView = (GridView)findViewById(R.id.gridView); 
    gridAdapter = new GridAdapter(this, folderXCHILD,isShow); 
    gridView.setAdapter(gridAdapter); 

} 
catch (Exception e) 
{ 
    Toast.makeText(this, "Cannot display the Content.", Toast.LENGTH_SHORT).show(); 
} 

} 

から呼び出されます。 GridAdapterクラスはアクティビティ自身ではありません。

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    final Holder holder = new Holder(); 

    View rowView; 

    if (convertView == null) { 

     rowView = inflater.inflate(R.layout.gridout, parent, false); 

    } else { 
     rowView = convertView; 
    } 
    holder.tv = (TextView) rowView.findViewById(R.id.textView1); 
    holder.img = (ImageView) rowView.findViewById(R.id.imageView1); 
    holder.chk = (CheckBox) rowView.findViewById(R.id.checkBox); 

    if (isShow) { 
     holder.chk.setVisibility(View.VISIBLE); 
    } else { 
     holder.chk.setVisibility(View.GONE); 
    } 
    final File f = data[position]; 

    if (f.isDirectory()) 
    { 
     holder.img.setImageResource(R.mipmap.folderpic); 
     holder.tv.setText(f.getName()); 
     holder.chk.setChecked(checkBoxState[position]); 
    } 
    else 
    { 
     ImageLoader.getInstance().displayImage("file://" + f.getPath(), holder.img); 

     holder.tv.setBackgroundResource(R.color.colorSecond); 
     holder.tv.setText(""); 
     holder.chk.setChecked(checkBoxState[position]); 
    } 



rowView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
         if(f.isDirectory()) 
           { 
        // I want to call the display(f.getPath()) method of MainActivity. 
       } 
      }); 

    return rowView; 
} 

問題は、GridAdapter内のonClick()メソッドからdisplay()メソッドを呼び出したいということです。私はどのように進めますか?

+0

アダプタクラスでインスタンスを作成し、アダプタクラスから任意のメソッドを呼び出すことができます。あなたはそれを試しましたか? –

+0

私はそれを考えていましたが、内容を表示するためだけにMain_activityのインスタンスを作成することは過度なことではありませんか?私がdisplay()メソッドを10回呼び出したとすると、Main_activityのインスタンスが10個作成され、アプリが重すぎることは確実です。また、Main_activityには、アプリの起動中に一度だけ必要なパラメータが含まれています。だから、私は、インスタンスを作ることは、何度も何度も不要なことを繰り返すと思います。 –

+0

10個のインスタンスを作成する必要はなく、1個だけ作成して何度も再利用できます。 –

答えて

0

あなたは選択肢にあります:インターフェイスのラインを見てみると

に活動 2.キャストコンテキストに 1.キャストコンテキスト:

gridAdapter = new GridAdapter(this, folderXCHILD,isShow); 

をあなたがアダプタにコンテキストを送信しています。したがって、アダプタの内部では、コンテキストの参照を保存して使用します。

((YourActivityOrInterface)context).YourFunctionOnActivity() 
+0

ありがとう.... –

関連する問題