我已经阅读了几篇与我有同样问题的SO帖子:
其他SO问题也提出同样的问题,但他们所拥有的解决方案(如果有的话)并不适用于我的情况。因此,我再次问这个问题=)
首先,fragment_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="se.snapcode.lanstrafiken.MainActivityFragment">
<LinearLayout
android:focusable="true" android:focusableInTouchMode="true"
android:layout_width="0px" android:layout_height="0px"/>
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="textPostalAddress"
android:ems="15"
android:id="@+id/editTextFrom"
android:hint="From"
android:layout_alignParentEnd="true"
android:focusableInTouchMode="false"
android:clickable="true"
android:layout_marginBottom="20sp"
/>
</LinearLayout>
现在是MainActivityFragment.java:
public class MainActivityFragment extends Fragment {
public MainActivityFragment() { }
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View myView = inflater.inflate(R.layout.fragment_main, container, false);
EditText ed1 = (EditText) myView.findViewById(R.id.editTextFrom);
ed1.setText("This is a test");
ed1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("Snapcode", "Test 1 2 3");
Toast.makeText(v.getContext(), "test", Toast.LENGTH_LONG).show();
}
});
EditText ed2 = (EditText) myView.findViewById(R.id.editTextTo);
ed1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
return myView;
}
}
当我单击EditText时,Log.d(...)根本没有显示在logcat中,并且没有显示Toast。
现在,如果我删除与Fragment中的EditText有关的所有内容,并将其放在Activity中,它就会起作用:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar1);
setSupportActionBar(toolbar);
EditText ed1 = (EditText) findViewById(R.id.editTextFrom);
ed1.setText("Test again");
ed1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("Snapcode", "Test from Activity");
Toast.makeText(MainActivity.this, "test", Toast.LENGTH_LONG).show();
}
});
}
// ...
}
有什么想法吗?
旁注: 我认为Android代码不是“封装”的设计非常糟糕。正如您在上面所看到的,我可以从Fragment外部访问Fragment内部的控件,就像控件都在同一范围内一样。 R.id.editTextFrom随处可用,我觉得很令人不安。它应该仅在片段内可用,除非您明确地将其设为“公共”。与.NET中的UserControls相比 - UserControls是真正独立的。 我没试过,但是如果两个单独的片段具有相同的控件ID,会发生什么?闻到网络当前的运作方式(以及WebComponents试图解决的问题)。
答案 0 :(得分:0)
我发现了问题。一个非常简单的,完全是我的错:
所以,是的......我的坏,没有什么可看的,向右移动=)