2016-06-11 7 views
0

Also ich habe eine ListView mit einem benutzerdefinierten Adapter und ich möchte, dass wenn ich eine Taste drücke ich konnte es von der OnItemClickListener von der MainActivity hören.Wie auf Daten in der Hauptaktivität von einer Taste zugegriffen wird, die in listView gedrückt wird?

Also meine Frage ist, was werde ich beim Aufruf onClick auf der Schaltfläche in meinem ListView übergeben, so dass ich es aus der Hauptaktivität lesen kann?

@Override 
public View getView(final int pos, View convertView, ViewGroup parent) { 
    Holder holder = new Holder(); 
    final CustomProductAdapter p=this; 
    final View rowView; 
    rowView = inflater.inflate(R.layout.product_list_test, null); 
    holder.productView=(TextView) rowView.findViewById(R.id.productView); 
    holder.descView=(TextView) rowView.findViewById(R.id.descView); 
    holder.imageView=(ImageView) rowView.findViewById(R.id.imageView); 
    holder.productCost=(TextView) rowView.findViewById(R.id.productCost); 
    holder.iButton=(ImageButton) rowView.findViewById(R.id.imageButton); 
    holder.iButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 


      //What will I put here? 


     } 
    }); 
    holder.productView.setText(proNames[pos]); 
    holder.descView.setText(R.string.description_product); 
    holder.productCost.setText("0.00"); 
    ImageView image =holder.imageView; 
    imageloader.DisplayImage(images[pos],image); 

    rowView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Toast.makeText(context, "You Clicked "+proNames[pos], Toast.LENGTH_SHORT).show(); 
     } 
    }); 
    return rowView; 
} 

so, dass ich es von hier aus wie diese lesen kann (ich weiß nicht, ob es der corect Weg ist)

listView = (ListView)findViewById(R.id.listView); 
    listView.setAdapter(new CustomProductAdapter(this, images, proNames1, desc)); 
    AdapterView.OnItemClickListener mMessageClickedHandler = new AdapterView.OnItemClickListener() { 
     public void onItemClick(AdapterView parent, View v, int position, long id) { 
      // Do something in response to the click 
      long ids=v.getId(); 
      if(ids==R.id.imageButton){ 
       Toast.makeText(getBaseContext(),"Button clicked at "+position,Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }; 
    listView.setOnItemClickListener(mMessageClickedHandler); 

in meinem MainActivity.java. Ich bin ein Anfänger, also bitte hilf mir, wenn ich es nicht richtig mache.

Antwort

1

Die Verwendung einer Schnittstelle zur Kommunikation ist eine der Möglichkeiten, dies zu erreichen.

//create an interface 
interface ButtonClickNotify{ 
    void onBUttonClick(int position); 
} 

implementieren es dann in der Haupttätigkeit

public calss MainActivity extends AppCompatActivity implements ButtonClickNotify{ 

    //Override the interface method 
    @Override 
    public void onButtonClick(int position){ 
     //do something 
    } 
} 

dann die Schnittstelle des Adapters aufrufen.

//declare an instance variable 
ButtonClickNotify buttonNotify; 
//Initiate the iterface in the constructor 
public MyListAdapter(Context context /*and other parameters*/){ 
    //after other constructor methods including calling super 
    try{ 
     buttonNotify=(MainActivity)context; 
    }catch(Throwable e){ 
     //interface is not implemented 
    } 
} 

//at the button onclick 
holder.iButton.setOnClickListener(new View.OnClickListener{ 
    @Overrride 
    public void onClick(View v){ 
     try{ 
      buttonNotify.onButtonClick(position); 
     }catch (Throwable e){ 
      //interface can be null 
     } 
    } 
}); 

Und Sie brauchen nicht die gleiche eine onClick auf rowView wie listView.setOnItemClickListener tut haben.

+0

danke für den Rat. – theSereneRebel