-1

如何在列表視圖中單擊ImageButton時打開新的活動?目前,我的OnClickListener在我的ArrayAdapter類中,但從那裏我不能開始一個新的活動。那麼如何在我的MainActivity中獲得OnClickListener,並且如何處理那裏的「名稱」和「ID」?如何在列表視圖中單擊ImageButton時打開新活動?

繼承人我ArrayAdapter:

public class MessageArrayAdapter extends ArrayAdapter<MessageHome> { 

private TextView playername; 
private ImageView profile; 
private ImageButton chat; 
private List<MessageHome> MessageList = new ArrayList<MessageHome>(); 
private LinearLayout singleMessageContainer; 

@Override 
public void add(MessageHome object) { 
    MessageList.add(object); 
    super.add(object); 
} 

public MessageArrayAdapter(Context context, int textViewResourceId) { 
    super(context, textViewResourceId); 
} 


public int getCount() { 
    return this.MessageList.size(); 
} 

public MessageHome getItem(int index) { 
    return this.MessageList.get(index); 
} 

public View getView(int position, View convertView, ViewGroup parent) { 
    View row = convertView; 
    if (row == null) { 
     LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     row = inflater.inflate(R.layout.activity_chat_singlemessage, parent, false); 
    } 
    singleMessageContainer = (LinearLayout) row.findViewById(R.id.singleMessageContainer); 
    MessageHome chatMessageObj = getItem(position); 
    playername = (TextView) row.findViewById(R.id.playername_); 
    playername.setText(chatMessageObj.name); 
    final String ID = chatMessageObj.ID; 
    final String name = chatMessageObj.name; 
    profile = (ImageView) row.findViewById(R.id.imageView2); 
    if(chatMessageObj.newm == 1) 
     profile.setImageResource(R.drawable.player); 
    else 
     profile.setImageResource(R.drawable.player2); 

    chat = (ImageButton) row.findViewById(R.id.ib_message); 
    chat.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Log.e("log_tag",name+ID); 
      // Here start new activity, but doesn't work here 

     } 
    }); 

    return row; 
} 

}

這是我的MainActivity:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Intent i = getIntent(); 
    setContentView(R.layout.activity_message); 

    listView = (ListView) findViewById(R.id.listView1); 

    messageArrayAdapter = new MessageArrayAdapter(getApplicationContext(), R.layout.activity_message_single); 
    listView.setAdapter(messageArrayAdapter); 

    listView.setTranscriptMode(AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL); 
    listView.setAdapter(messageArrayAdapter); 

    //to scroll the list view to bottom on data change 
    messageArrayAdapter.registerDataSetObserver(new DataSetObserver() { 
     @Override 
     public void onChanged() { 
      super.onChanged(); 
      listView.setSelection(messageArrayAdapter.getCount() - 1); 
     } 
    }); 
} 

感謝您的幫助;)

+0

* OnClickListener是在我的ArrayAdapter類,但從那裏我不能開始一個新的活動*爲什麼? –

回答

3

所有ViewsContext

chat.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Log.e("log_tag",name+ID); 
     Intent intent = new Intent(v.getContext(), NextActivity.class); 
     v.getContext().startActivity(intent); 
    } 
}); 
0

在適配器:

private Context context; 
public MessageArrayAdapter(Context context, int textViewResourceId) { 
    super(context, textViewResourceId); 
    this.context = context; 
} 

,並在您聽衆:

context.startActivity(new Intent(context,YourNewActivity.class)); 
1

嘗試把下面一行放在activity_chat_singlemessage.xml

android:onClick="nameOfFunction" 

,並把這個功能您的活動

public void nameOfFunction(final View view){ 
     startActivity(new Intent(this, YourNewActivity.class)); 
} 
0

我想你有幾個問題。但首先,您的適配器中只有一個圖像按鈕的實例。因此,我認爲只有列表中的最後一項會有圖像按鈕綁定。 您應該爲列表中的每個項目創建一個視圖持有者,因爲您需要將該事件綁定到列表中的每個項目,以存儲該項目與該視圖持有者的索引。因此,創建一個內部類(我切了你的一些細節):

public static class ViewHolder{ 
    public TextView playerName; 
    public ImageButton profileButton; 
} 

在你的適配器可getView財產處理viewHolder:

public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder row; 
    if (convert View == null) { 
     LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     row = inflater.inflate(R.layout.activity_chat_singlemessage, parent, false); 
     row.playerName = (TextView) row.findViewById(R.id.playername_); 
     row.profileButton = (ImageButton) row.findViewById(R.id.ib_message); 
     convertView.setTag(row); 
    } else row = (ViewHolder) convertView.GetTag(); 
    row.setText(chatMessageObj.name); 
    row.profileButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Log.e("log_tag",name+ID); 
      Intent intent = new Intent(v.getContext(), NextActivity.class); 
      v.getContext().startActivity(intent); 
     } 
    }); 

希望足以讓你去。 (從asadmshah複製意圖代碼)

相關問題