【问题标题】:Android onclick listener custom listviewAndroid onclick监听器自定义listview
【发布时间】:2015-04-19 10:11:29
【问题描述】:

使用以下代码,我可以正确地从 mysql db 接收动态列表并将元素放入列表视图中。

public class MenuActivity extends ListActivity implements FetchDataListener {
private ProgressDialog dialog;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_menu);
    initView();
}

private void initView() {
    // show progress dialog
    dialog = ProgressDialog.show(this, "", "Loading..");

    String url = "http://www.*********.php";
    FetchDataTask task = new FetchDataTask(this);
    task.execute(url);
}

@Override
public void onFetchComplete(List<Application> data) {
    // dismiss the progress dialog
    if(dialog != null)  dialog.dismiss();
    // create new adapter
    ApplicationAdapter adapter = new ApplicationAdapter(this, data);

    // set the adapter to list
    setListAdapter(adapter);


}

@Override
public void onFetchFailure(String msg) {
    // dismiss the progress dialog
    if(dialog != null)  dialog.dismiss();
    // show failure message
    Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
}

这是我的数组适配器:

public class ApplicationAdapter extends ArrayAdapter<Application>{
private List<Application> items;

public ApplicationAdapter(Context context, List<Application> items) {
    super(context, R.layout.app_cat_list, items);
    this.items = items;
}

@Override
public int getCount() {
    return items.size();
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;

    if(v == null) {
        LayoutInflater li = LayoutInflater.from(getContext());
        v = li.inflate(R.layout.app_cat_list, null);
    }


    Application app = items.get(position);

    if(app != null) {

        TextView titleText = (TextView)v.findViewById(R.id.titleTxt);

        if(titleText != null) titleText.setText(app.getTitle());

           }

    return v;
}

现在我想单击单行并打开另一个通过 Intent extra 传递一些值的活动。 我应该在哪里实现点击监听器? 我很确定它应该插入到“getView”中,但我如何通过意图传递 app.getTitle()?我知道一般如何通过额外的意图,尝试但没有点击发生。 任何帮助将不胜感激,谢谢

【问题讨论】:

    标签: android android-intent android-listview onclick android-arrayadapter


    【解决方案1】:

    现在我想单击单行并打开另一个通过的活动 通过意图额外的一些值。我应该在哪里实现点击监听器?

    不需要添加OnItemClickListener,因为在MenuActivity中扩展了ListActivity,所以只需覆盖onListItemClick处理ListView行点击的方法:

    @Override
     public void onListItemClick(ListView l, View view, int position, long id) {
         // your code here...
     }
    

    我如何通过意图传递 app.getTitle()?

    使用view参数获取onListItemClick中选中行TextView的值:

    TextView txtView=(TextView)v.findViewById(R.id.titleTxt);
    String selectedText=txtView.getText().toString();
    

    使用selectedText 在下一个活动中通过 Intent 发送值

    【讨论】:

      【解决方案2】:

      把它放在你的 getView() 中

        v.setOnClickListener(new OnClickListener() {
      
                          @Override
                          public void onClick(View arg0) {
                              Intent intent =new Intent(context, YourActivity.class);
                              context.startActivity(intent);
      
                          }
                      });
      

      【讨论】:

        【解决方案3】:

        可以有多种方式,以下是其中之一:

        在您的活动中的列表视图上设置 onItemClickListner,它会给您一个回调,即 onListItemClick。但是正如你所说,你想要他们的标题,你必须在 getView 方法中的 convertView 上设置标签,比如 covertView.setTag("itemTitle");并在您的 onListItemClick 中从视图中获取标签并将其转换为像这样的标题 v.getTag().toString();并将其设置在您想要的任何位置。 以下是完整代码:

        @Override
        public void onListItemClick(ListView l, View view, int position, long id) {
            String title = view.getTag().toString();
            Intent intent = new Intent(this, SecondActivity.class);
            intent.putExtra("title", title);
            startActivity(intent);
         // your code here... }
        

        如果卡在任何地方,请发布。

        【讨论】:

          猜你喜欢
          • 2012-01-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-18
          • 2011-12-24
          • 1970-01-01
          相关资源
          最近更新 更多