【问题标题】:How to Enable Specific List View Item's click listener如何启用特定列表视图项单击侦听器
【发布时间】:2015-08-03 09:30:13
【问题描述】:

在我的应用程序中,我正在从解析中获取数据,其中一些行包含员工描述,而一些行不包含。 我想让这种情况发生,如果在 Parse of one Items 上没有描述,则无法单击该列表项或可以执行 onItemClick 功能。

或者只有那些有Description 的可以被点击,我从 Parse 得到。

我真的不知道如何实现这一点,这在 Android 中是否可以实现。

我已经完成了从解析中获取数据并在 Activity 中显示的所有其他工作 但对此一无所知。 请帮忙

下面是我的全班代码

public class FragmentActivity_DayFirst extends Fragment implements
    OnItemClickListener {
Bitmap bmp;
ListView listview;
List<ParseObject> ob;
ProgressDialog mProgressDialog;
ArrayAdapter<String> adapter;
AgendaListAdapter adapter2;
Fragment fr;
FragmentManager fm;
FragmentTransaction fragmentTransaction;
private List<GetSet> agendaList = new ArrayList<GetSet>();
List<HashMap<String, String>> aList = new ArrayList<HashMap<String, String>>();

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.activity_fragment__dayfirst,
            container, false);
    new RemoteDataTask().execute();

    return view;
}

// RemoteDataTask AsyncTask
private class RemoteDataTask extends AsyncTask<Void, Void, Void> {
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        // Create a progressdialog
        mProgressDialog = new ProgressDialog(getActivity());
        // Set progressdialog title
        mProgressDialog.setTitle("Loading Details of 1st Day");
        // Set progressdialog message
        mProgressDialog
                .setMessage("Wait.. It May Take a while depending on your Bandwidth");
        mProgressDialog.setIndeterminate(false);
        // Show progressdialog
        mProgressDialog.show();
    }

    @Override
    protected Void doInBackground(Void... params) {
        ParseQuery<ParseObject> query = new ParseQuery<ParseObject>(
                "Agendas");
        query.whereEqualTo("day", "August 7th, 2015");
        query.orderByAscending("createdAt");
        try {
            ob = query.find();
            if (ob != null) {
                for (ParseObject agendas : ob) {

                    // ParseFile image = (ParseFile)
                    // complain.get("imageURL");
                    GetSet agendaGetSet = new GetSet();
                    agendaGetSet.setStartTime((String) agendas
                            .get("startTime"));
                    Log.v("post", (String) agendas.get("startTime"));
                    agendaGetSet
                            .setEndTime((String) agendas.get("endTime"));
                    Log.v("category", (String) agendas.get("endTime"));
                    agendaGetSet.setEventTitle((String) agendas
                            .get("description"));
                    Log.v("post", (String) agendas.get("description"));

                    agendaList.add(agendaGetSet);
                }
            } else {
                Log.v("post", "No Results");
            }

        } catch (ParseException e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        Log.v("post", "After query post");
        listview = (ListView) getView().findViewById(R.id.firstlistview);
        // Pass the results into ListViewAdapter.java
        adapter2 = new AgendaListAdapter(getActivity(), agendaList);
        // Binds the Adapter to the ListView
        listview.setAdapter(adapter2);
        // Close the progressdialog
        mProgressDialog.dismiss();
        // Item Click Listener for the listview
        OnItemClickListener itemClickListener = new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View container,
                    int position, long id) {
                // Getting the Container Layout of the ListView
                LinearLayout linearLayoutParent = (LinearLayout) container;

                // Getting the inner Linear Layout
                LinearLayout linearLayoutChild = (LinearLayout) linearLayoutParent
                        .getChildAt(0);
                // Getting the inner Linear Layout
                RelativeLayout relativeLayoutChild = (RelativeLayout) linearLayoutParent
                        .getChildAt(1);

                // Getting the Country TextView
                TextView tv_title = (TextView) relativeLayoutChild
                        .getChildAt(0);
                TextView startTime = (TextView) linearLayoutChild
                        .getChildAt(0);
                TextView endTime = (TextView) linearLayoutChild
                        .getChildAt(1);

                String mTitle = tv_title.getText().toString();
                String mstartTime = startTime.getText().toString();

                String mendTime = endTime.getText().toString();

                Intent intent = new Intent(getActivity(), EventDetail.class);
                intent.putExtra("title", mTitle);
                intent.putExtra("starttime", mstartTime);
                intent.putExtra("endtime", mendTime);
                startActivity(intent);
                Toast.makeText(getActivity(),
                        mTitle + " " + mstartTime + " " + mendTime,
                        Toast.LENGTH_SHORT).show();
            }
        };
        listview.setOnItemClickListener(itemClickListener);
    }
}

public void onStart() {
    super.onStart();

}

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    // TODO Auto-generated method stub

}

}

【问题讨论】:

  • 嘿阿萨德,请发布代码
  • @RajanBhavsar 刷新以查看代码,对于点击监听器,我不知道该怎么做
  • 您必须将每个 Listview 项目的标签设置为 true,如果没有该项目的描述,则将该项目设置为 false,单击该项目时,您必须检查标签如果该项目为真,则运行您的代码,否则不运行。

标签: android list listview onitemclicklistener


【解决方案1】:

你可以在你的适配器类中做的是覆盖下面的函数

@Override
public boolean isEnabled(int position) {


  // here you can implement logic and can return true and false
  // if you will return true then row will be clickable 
  // if you return false the row will be not clickable        

    return true;
}

【讨论】:

  • 你能解释一下我如何使用它吗?我从解析中获取数据,这是一个描述,但我没有在列表视图中显示它,所以我无法获得它的位置。但是如果解析中的描述为空,则无法单击列表项以查看描述,但如果描述不为空,则将启用单击,以便用户可以单击并查看描述
  • @AsadMehmood 在您的适配器类“AgendaListAdapter”中实现该函数,如果特定 objext 为 null,则在该函数中返回 false,否则返回 true
  • 非常感谢你终于明白你的意思问题解决了谢谢好友@Moubeen Farooq Khan
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-02
  • 1970-01-01
相关资源
最近更新 更多